次のコードを見てください。
#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
integral_constant
この問題は、次の非常に最小限の例にも存在します。
template<class T>
struct Bar{
static const bool value = true;
};