采取以下代码:
#include <type_traits>
#include <iostream>
template <class T>
void print(T &&t){
std::cout << t << std::endl;
}
template<class T, T val>
struct Foo{
static constexpr T value = val;
};
int main(){
print(Foo<int, 123>::value);
}
它拒绝在Clang 3.3和GCC 4.8.1 ("undefined reference to Foo<int, 123>::value")
下编译,这让我感到困惑,因为Foo
与std::integral_constant
完全相同,并且相同的代码与{{{ 1}}。它也在打印功能中使用普通左值引用失败。关于这种行为的任何解释?
这个极小的例子也出现了这个问题:
integral_constant
答案 0 :(得分:4)
正如编译器所说,没有对静态变量的引用,你必须添加
template<class T, T val>
constexpr T Foo<T, val>::value;
定义类Foo后