11

次のコードを見てください。

#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_constantintegral_constant

この問題は、次の非常に最小限の例にも存在します。

template<class T>
struct Bar{
    static const bool value = true;
};
4

1 に答える 1