C++11 GCC、Clang和MSVC中的可变模板参数和差异大小-谁是对的?

C++11 GCC、Clang和MSVC中的可变模板参数和差异大小-谁是对的?,c++11,g++,variadic-templates,clang++,template-templates,C++11,G++,Variadic Templates,Clang++,Template Templates,当使用可变模板参数时,要使用sizeof…()获取参数的数量,GCC和Clang有不同的要求。GCC要求您填写可变参数的模板参数,而Clang要求您不填写。因为它们都声称符合标准,所以必须有一个bug,或者标准必须是不明确的(以防在c++1y中更正) 示例(完整的可编译示例位于): MSVC 2013(完整性-与不支持的Clang w/out constexpr相同): 这是一个,;它在GCC4.9.0中得到了修复 从5.3.3开始[expr.sizeof]: 5-表达式中的标识符应命名参数包。

当使用可变模板参数时,要使用sizeof…()获取参数的数量,GCC和Clang有不同的要求。GCC要求您填写可变参数的模板参数,而Clang要求您不填写。因为它们都声称符合标准,所以必须有一个bug,或者标准必须是不明确的(以防在c++1y中更正)

示例(完整的可编译示例位于):

MSVC 2013(完整性-与不支持的Clang w/out constexpr相同):

这是一个,;它在GCC4.9.0中得到了修复

从5.3.3开始[expr.sizeof]

5-表达式中的标识符应命名参数包。[……]


我找过了,但没找到。谢谢你通知我!我将不得不有一些特定于GCC版本的宏,使这项工作,然后。
template<template <class> class... T>
struct X
{
    /* code goes here */
};
static const constexpr size_t count = sizeof...(T<Z>);
static const constexpr size_t count = sizeof...(T);
static const           size_t count = sizeof...(T);