[300分]关于从T&到T的模板实参推演问题的讨论
问题来自于新的auto关键字不能取得"引用"的类型啊,为什么? 这个帖子,主题意思是从T&到T的实参推演结果是T的原因是什么,包括偶在内有多人提出了自己的看法,虽然楼主也给了分,但实际上没有一个帖子道出了真正的原因。老实说偶一直没有注意到这个问题,通常的模板基础书籍例如C++ template等也没谈到,偶在C++11中翻了半天也没找到具体的条款,在C++98/03中测试了一下,发现从98/03起就是这样推导的了,并不是11的专利,为了问题描述方便,偶提供了98/03下的代码:
template< typename T >
struct is_reference
{
enum { value = 0 };
}
template< typename T >
struct is_reference< T& >
{
enum { value = 1 };
}
template< typename T >
void fun( T t )
{
std::cout << is_reference< T >::value;
}
int main( void )
{
int i, &a = i;
fun( a );
return 0;
}
#include <iostream>
template< typename T >
struct is_reference {
enum { value = 0 };
};
template< typename T >
struct is_reference< T& > {
enum { value = 1 };
};
int main(int argc, char* argv[]) {
int i, &a = i;
std::cout << is_reference< decltype(a) >::value << std::endl;
}
template < typename Ty >
void func(Ty val);
template < typename _Ty >
struct RemoveCV
{
_Ty GenerateVal(void);
template < typename _auto_t > _auto_t fGetType(_auto_t);
typedef decltype(fGetType(GenerateVal())) type;
};