首页 > 解决方案 > 将模板名称作为类参数传递会导致在可变参数扩展中使用时出错 - 我是否发现了 MSVC 编译器错误?

问题描述

(首先,如果我对术语的使用不正确/标准,我深表歉意,我希望这足以了解要点......欢迎指点修复标题/措辞!)

目标概述

该类将为template-name列表中的每种类型专门继承。

执行

无效的 C++ 代码基本上如下(我在 GCC 下的下一个片段中使其有效)

/// NOTE: The example is not complete... just to abbreviate the Godbolt example
template<typename Type>
struct TemplateName 
{};

template<typename TemplateName, typename... Types>
class HandleAllTypeImpl<TemplateName, std::tuple<Types...> >
    : public TemplateName<Datas>...
{};

为了使其有效,TemplateName必须是完整类型,所以我制作了一个虚拟容器类型,然后可以TemplateName::Impl用来访问和实例化模板化成员

/// NOTE: The example is not complete... just to abbreviate the Godbolt example

struct TemplateName 
{ 
    template<typename Type>
    struct Impl 
    {};
}

template<typename TemplateName, typename... Types>
class HandleAllTypeImpl<TemplateName, std::tuple<Types...> >
    : public TemplateName::Impl<Datas>...
{};

完整示例 - 在 GCC 下工作,在 MSVC 下失败

https://godbolt.org/z/898hE8MhY

报告 MSVC 错误

TemplateName::Impl<Datas>使用as时报错

error C2143: syntax error: missing ',' before '<'

标签: c++visual-studiogccvisual-c++c++17

解决方案


推荐阅读