【发布时间】:2013-09-25 02:56:42
【问题描述】:
为什么 A 中的特化 S 合法而 B 中的 S 不合法?
(如果 B 没有被注释掉) GCC 4.8.1:错误:非命名空间范围“B 类”中的显式特化
#include <type_traits>
#include <iostream>
class Y {};
class X {};
struct A {
template<class T, class = void>
class S;
template<class T>
struct S < T, typename std::enable_if< std::is_same< Y, T >::value >::type >
{
int i = 0;
};
template<class T>
struct S < T, typename std::enable_if< std::is_same< X, T >::value >::type >
{
int i = 1;
};
};
/*
class B
{
template<class T>
class S;
template<>
class S < Y > {};
template<>
class S < X > {};
};
*/
int main()
{
A::S< X > asd;
std::cout << asd.i << std::endl;
}
【问题讨论】:
-
您可以在非命名空间范围内进行部分特化,但不能有显式特化。
-
@jrok 你能详细说明一下吗? This 的回答似乎不同意。
标签: c++ templates nested-class specialization