变异模板模板参数和GCC,Clang和MSVC中的差异大小 - 谁是对的?

时间:2014-06-19 17:32:36

标签: c++11 g++ variadic-templates clang++ template-templates

使用variadic模板模板参数时,使用sizeof获取参数数量...()GCC和Clang有不同的要求。 GCC要求您填写可变参数的模板参数,而Clang要求您不要这样做。由于他们都声称符合标准,因此必须有错误或标准必须含糊不清(如果它们应在c ++ 1y中更正)。

示例(http://ideone.com/5TWFKY处的完整可编辑示例):

template<template <class> class... T>
struct X
{
    /* code goes here */
};

GCC(注意:在这种情况下,Z是任何非模板类):

static const constexpr size_t count = sizeof...(T<Z>);

锵:

static const constexpr size_t count = sizeof...(T);

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

static const           size_t count = sizeof...(T);

1 个答案:

答案 0 :(得分:5)

这是bug in gcc;它已在gcc 4.9.0中修复。

从5.3.3 [expr.sizeof]

  

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