NKa*_*tUT 6 c++ templates decltype
以下程序使用自动参数生成函数模板,然后显式实例化它们,将在 g++ 和 clang (x86-64 trunk, -std=c++20) 中正常编译,但在 MSVC (x64 v19.latest) 中给出错误 C2945 和 C3190 /std:c++20)。
https://godbolt.org/z/xsWcezzz6
#include <cstdint>
#include <concepts>
template <typename T>
concept MyType = std::same_as<T,uint16_t> || std::same_as<T,uint32_t>;
class A {
public:
void Foo(uint32_t arg1, MyType auto arg2);
void Bar(uint32_t agr1, MyType auto arg2, decltype(arg2) arg3);
};
void A::Foo(uint32_t arg1, MyType auto arg2) {} // define
template void A::Foo(uint32_t, uint16_t); // explicit instantiate for uint16_t
template void A::Foo(uint32_t, uint32_t); // explicit instantiate for uint32_t
void A::Bar(uint32_t arg1, MyType auto arg2, decltype(arg2) arg3) {} // define
template void A::Bar(uint32_t, uint16_t, uint16_t); // explicit instantiate for uint16_t
template void A::Bar(uint32_t, uint32_t, uint32_t); // explicit instantiate for uint32_t
int main() {}
Run Code Online (Sandbox Code Playgroud)
MSVC错误解释如下:
(26): 错误 C3190: 'void A::Bar(uint32_t,uint16_t,uint16_t)' 以及提供的模板参数不是 'A' 的任何成员函数的显式实例化 (26): 错误 C2945: 显式实例化不引用模板类专业化 (27):错误 C3190: 'void A::Bar(uint32_t,uint32_t,uint32_t)' 以及提供的模板参数不是 'A' 的任何成员函数的显式实例化 (27):错误 C2945:显式实例化未引用模板类专业化。
我是否做错了 GCC/Clang 让我逃脱的错误,或者这是我应该报告的 MSVC bug?有任何已知的解决方法吗?
| 归档时间: |
|
| 查看次数: |
129 次 |
| 最近记录: |