类模板中静态变量模板的部分指定

时间:2018-12-08 23:04:58

标签: c++ templates c++14 template-specialization variable-templates

如果我做部分专业化,我会得到与clang和g ++不同的结果。

template < typename T>
class X
{
    public:
        T i;
        X(T _i): i{_i}{}

        operator T(){ return i; }
};  

template < typename T2 >
class Y
{
    public:
        template <typename T>
            static X<T> x_in_y;
};  

template< typename T2> 
template< typename T>
X<T> Y<T2>::x_in_y{200};


template<>
template<>
X<float> Y<int>::x_in_y<float>{100};

template<>
template<>
X<int> Y<int>::x_in_y<int>{101};

template<  >
template< typename T >
X<T> Y<bool>::x_in_y{77};



int main()
{
    std::cout << Y<int>::x_in_y<int> << std::endl;
    std::cout << Y<int>::x_in_y<float> << std::endl;

    std::cout << Y<float>::x_in_y<float> << std::endl;
    std::cout << Y<bool>::x_in_y<float> << std::endl;
}

我用g ++和clang编译,并得到了不同的行为:

[~]$ g++ main.cpp 
[~]$ a.out 
101
100
200
200

[~]$ clang++ main.cpp 
[~]$ a.out 
101
100
200
77

奖金:是否有可能专门研究另一种方法?:

template< typename T2 >
template<  >
X<int> Y<T2>::x_in_y{105};

0 个答案:

没有答案