gpt4 book ai didi

C++:如何在声明它的模板类主体之外定义枚举类?

转载 作者:行者123 更新时间:2023-11-30 03:21:12 24 4
gpt4 key购买 nike

我有一些采用以下形式的 C++ 代码:

template <typename type>
class foo
{
type a;
class bar;
};

template <typename type>
class foo<type>::bar
{
enum class baz;
};

template <typename type>
enum class foo<type>::bar::baz
{
val1,
val2
};

使用这段代码,我试图让枚举类可以通过 foo::bar 内部的方法访问,并能够存储此枚举类类型的数据。枚举类也不意味着是模板类型 - 枚举类枚举器是整数/枚举类的默认类型。

但是,当我编译它是 MinGW/Code::Blocks 时,这似乎产生了两条错误消息,都在线:

enum class foo<type>::bar::baz

error: template declaration of 'enum baz'

error: foo<type>::bar has not been declared

最佳答案

我认为这几乎可以肯定是一个编译器错误。基于temp.mem.classtemp.mem.enum ,我会说这绝对应该是有效的 C++。 clang 和 icc 似乎都能很好地编译这段代码。然而,GCC(MinGW 基本上就是 GCC)和 MSVC 显然无法编译它。似乎两个编译器(即使在最新版本中)都将类模板的枚举成员的定义误认为是试图声明枚举模板(这确实是非法的)......

quick test here

编辑:对于 MSVC,似乎已经有一个 Unresolved 问题 here

关于C++:如何在声明它的模板类主体之外定义枚举类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52245397/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com