假设以下定义:
#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)