【问题标题】:Variadic template-template arguments and sizeof differences in GCC, Clang, and MSVC - who is right?GCC、Clang 和 MSVC 中的可变模板模板参数和 sizeof 差异 - 谁是对的?
【发布时间】: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


    【解决方案1】:

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

    从 5.3.3 [expr.sizeof ]

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

    【讨论】:

    • 我搜索了它,但没有找到。谢谢你通知我!我将不得不有一些特定于 GCC 版本的宏来完成这项工作。
    猜你喜欢
    • 2014-07-12
    • 2015-08-18
    • 2012-01-20
    • 1970-01-01
    • 2013-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多