C++ 使用类型参数专门化部分模板参数(VC+;+;v140工具集)

C++ 使用类型参数专门化部分模板参数(VC+;+;v140工具集),c++,templates,visual-studio-2015,C++,Templates,Visual Studio 2015,我尝试构建一个部分模板专业化,如下所示(这在这个简短的形式中没有意义,但它简化为问题): #包括 #包括 模板结构A{ int x; std::基本字符串y; }; 样板 结构B{B(void){std::cout,这不是的语法。这是: template <class T, class U> class Traits { }; template <class T> // one template parameter class Traits<T, decltype

我尝试构建一个部分模板专业化,如下所示(这在这个简短的形式中没有意义,但它简化为问题):

#包括
#包括
模板结构A{
int x;
std::基本字符串y;
};
样板
结构B{B(void){std::cout,这不是的语法。这是:

template <class T, class U>
class Traits { };

template <class T> // one template parameter
class Traits<T, decltype(A<T>::x)> { };
//           ^^^^^^^^^^^^^^^^^^^^

template <class T>
class Traits<T, decltype(A<T>::y)> { };
模板
类特征{};
模板//一个模板参数
类特征{};
//           ^^^^^^^^^^^^^^^^^^^^
样板
类特征{};

您还必须使
A::x
A::y
可访问。

除了缺少类关键字和分号之外,这是显式完整类模板专门化的一个示例:

#include <iostream>
template<typename T>   // primary template
struct is_void : std::false_type
{
};
template<>  // explicit specialization for T = void
struct is_void<void> : std::true_type
{
};
#包括
模板//主模板
结构为\u void:std::false\u类型
{
};
模板//T=void的显式专门化
结构为\u void:std::true\u类型
{
};

您是否缺少四个
关键字和一个分号?请尝试。这与问题有何关系?对于完整的模板专业化,问题并不存在,只有在我必须添加第二个参数时才会出现。
#include <iostream>
template<typename T>   // primary template
struct is_void : std::false_type
{
};
template<>  // explicit specialization for T = void
struct is_void<void> : std::true_type
{
};