当使用可变参数模板-模板参数时,使用 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);