const double&在模板类部分特化

时间:2015-10-29 14:54:35

标签: c++ templates c++11 partial-specialization

假设以下定义:

#define AA(x) A<decltype(x), x>

template<typename T, T x>
struct A;

template<int a>
struct A<int, a>{};

template<bool b>
struct A<bool, b>{};

template<const double &d>
struct A<const double &, d>{};

extern constexpr double myDouble = 0.2;

在这些定义之后,以下工作:

AA(false) myA2; 

然而,编译器在看到它时会抱怨:

AA(myDouble) myA3;

它说:

  

'const double'不是模板非类型参数的有效类型

     

#define AA(x)A

另一方面,编译器对此非常满意:

A<const double &, myDouble> myA1; 

此编译器错误的原因是什么? (使用g++版本4.8.2)

0 个答案:

没有答案