2

当使用可变参数模板-模板参数时,使用 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 相同,不支持 constexpr):

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

1 回答 1

5

这是gcc 中的一个错误;它已在 gcc 4.9.0 中修复。

从 5.3.3 [expr.sizeof] 开始

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

于 2014-06-19T17:52:21.973 回答