gpt4 book ai didi

c++ - 成员模板特化不使用 clang 编译

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:07:47 25 4
gpt4 key购买 nike

考虑以下程序:

struct S {
enum E {
e
};
template<E> void f() = delete;
};

template<> void S::f<S::E::e>() {}

int main() {
S s;
s.f<S::E::e>();
}

GCC 5.4.0 编译代码,而 clang 3.8.0 失败:

$ clang++ -std=c++14 main.cpp 
main.cpp:10:20: error: redefinition of 'f'
template<> void S::f<S::E::e>() {
^
main.cpp:8:20: note: previous definition is here
template<> void S::f<S::E::e>();
^
main.cpp:14:11: error: no matching member function for call to 'f'
s.f<S::E::e>();
~~^~~~~~~~~~
main.cpp:5:22: note: candidate template ignored: substitution failure [with $0 = S::E::e]
template<E> void f() = delete;
^
2 errors generated.

是 clang 正确而 GCC 错误还是相反?请注意,如果删除了 delete 说明符,则 clang 会编译代码。

最佳答案

这似乎是缺陷报告 Explicit specialization of deleted function template ,从here可以看出自 3.9.0 以来,该问题似乎已在 clang 中修复。

关于c++ - 成员模板特化不使用 clang 编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46950684/

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