gpt4 book ai didi

c++ - 使用枚举参数重载模板时出现 MSVC 编译器错误

转载 作者:行者123 更新时间:2023-11-30 04:51:37 24 4
gpt4 key购买 nike

我尝试编写将枚举类作为非类型模板参数的模板,如下面的代码所示。

当我尝试使用 MSVC2017 编译此代码时,出现以下编译器错误:

source_file.cpp(16): error C2668: 'g': ambiguous call to overloaded function
source_file.cpp(10): note: could be 'void g<E2::v>(void)'
source_file.cpp(6): note: or 'void g<E1::v>(void)'
source_file.cpp(16): note: while trying to match the argument list '()'

另一方面,Clang 和 gcc 编译我的代码时没有任何错误消息和输出

g1
g2

如预期。

#include <iostream>

enum class E1{v};
enum class E2{v};

template<E1 e1> void g(){
std::cout << "g1" << std::endl;
}

template<E2 e2> void g(){
std::cout << "g2" << std::endl;
}

int main(){
g<E1::v>();
g<E2::v>();
}

(此代码可以在 rextester 上测试。)

是我的代码有错误还是 MSVC 有问题?您知道解决此问题的任何方法吗?

最佳答案

Is there a mistake in my code or is it rather an issue with MSVC?

对我来说,这看起来像是 MSVC 中的一个错误。

Do you know any ways to work around this problem?

似乎如果 E1::vE2::v 有不同的值,那么它编译正确。我通过将你的第二个枚举更改为这个来测试这个:

enum class E2 { v = 2 };

关于c++ - 使用枚举参数重载模板时出现 MSVC 编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54755791/

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