gpt4 book ai didi

c++ - MSVC 错误?未找到受约束函数的重载成员

转载 作者:行者123 更新时间:2023-12-03 06:49:43 25 4
gpt4 key购买 nike

此代码无法使用 MSVC 19.27.29112.0 进行编译,但适用于 GCC 10.2.0。在这两种情况下都启用了 C++20:

template <typename T>
struct Blah {
void blah() requires (sizeof(T) == 4);
};

template <typename T>
void Blah<T>::blah() requires (sizeof(T) == 4) {}

int main() {
Blah<int> b;
b.blah();

return 0;
}

error C2511: 'void Blah::blah(void)': overloaded member function not found in 'Blah'


该错误仅在 requires 时发生取决于类的模板类型。例如, requires (sizeof(int) == 4)工作正常。转换 blah()到模板化函数并执行类似 requires (sizeof(U) == 4) 的操作也有效。
谁能确认这是一个编译器错误?

最佳答案

(评论太长了。)确实,这看起来像一个错误,我建议您正式 report it .
奇怪的是,下面的工作,而不是。

template <typename T>
struct Blah {
enum { sizeofT = sizeof(T) }; // or: static const size_t sizeofT = sizeof(T);
// or: static constexpr size_t sizeofT = sizeof(T);
void blah() requires (sizeofT == 4);
};

template <typename T>
void Blah<T>::blah() requires (sizeofT == 4) {}

int main() {
Blah<int>().blah(); // ok
Blah<float>().blah(); // ok

// Blah<short>().blah() // c7500: 'blah': no function satisfied its constraints
// Blah<double>().blah(); // c7500: 'blah': no function satisfied its constraints

return 0;
}

关于c++ - MSVC 错误?未找到受约束函数的重载成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64518590/

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