【发布时间】:2014-06-19 17:32:35
【问题描述】:
使用可变参数模板-模板参数时,使用 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);
【问题讨论】:
标签: c++11 g++ variadic-templates clang++ template-templates