gpt4 book ai didi

c++ - 专门化非模板类的模板化构造函数

转载 作者:太空狗 更新时间:2023-10-29 21:16:06 24 4
gpt4 key购买 nike

如何专门化非模板类的模板构造函数?下面的代码使用 gcc 和 icc 可以很好地编译,但不能使用 clang 和 msvc。

代码是 a) 非法但 icc/gcc 编译它还是 b) 合法但 clang/msvc 由于某种原因编译失败。

复制者:

$ cat template_01.cpp
struct A
{
template<class T>
A(T const &t);
};

template<>
A::A<double>(double const& t) {}

int main()
{
A a(42.0);
}

复制步骤:

$ clang++ template_01.cpp
template_01.cpp:8:4: error: qualified reference to 'A' is a constructor name rather than a type wherever a constructor can be declared
A::A<double>(double const& t) {}
^
template_01.cpp:8:5: error: expected unqualified-id
A::A<double>(double const& t) {}
^
2 errors generated.
$

$ g++ template_01.cpp
$

$ icc template_01.cpp
$

$ cl.exe template_01.cpp
Microsoft (R) C/C++ Optimizing Compiler Version 18.00.40629 for x86
Copyright (C) Microsoft Corporation. All rights reserved.

template_01.cpp
template_01.cpp(8) : error C2143: syntax error : missing ';' before '<'
template_01.cpp(8) : error C2988: unrecognizable template declaration/definition
template_01.cpp(8) : error C2059: syntax error : '<'
template_01.cpp(11) : error C2143: syntax error : missing ';' before '{'
template_01.cpp(11) : error C2447: '{' : missing function header (old-style formal list?)
$

最佳答案

我相信,这是 CLang 中的一个错误。标准中没有任何内容可以阻止构造函数的显式特化,gcc 中的类似问题被认为是错误:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=9050

关于c++ - 专门化非模板类的模板化构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36045416/

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