我正在使用g++处理使用g++ -std=c++2a -fconcepts的概念,但是在使用#include概念头时出现了一个错误:没有这样的文件或目录。有人能帮我调试一下吗。下面是我从cp首选项复制的代码:
#include <string>
#include <cstddef>
#include <concepts>
using namespace std::literals;
// Declaration of the concept "Hashable", which is satisfied by
// any type T such that for values a of type T,
// the expression std::hash<T>{}(a) compiles and its result is convertible to std::size_t
template<typename T>
concept Hashable = requires(T a) {
{ std::hash<T>{}(a) } -> std::convertible_to<std::size_t>;
};
struct meow {};
template<Hashable T>
void f(T); // constrained C++20 function template
// Alternative ways to apply the same constraint:
// template<typename T>
// requires Hashable<T>
// void f(T);
//
// template<typename T>
// void f(T) requires Hashable<T>;
int main() {
f("abc"s); // OK, std::string satisfies Hashable
f(meow{}); // Error: meow does not satisfy Hashable
}发布于 2020-03-03 21:38:43
GCC 9不支持C++20概念,只支持与前者不同的早期概念技术规范(TS) (例如定义概念的语法不同)。
你需要GCC 10来使用这个代码。
概念TS是文档化的在这个on首选项页面上,而不是代码来自的这一个。
https://stackoverflow.com/questions/60515849
复制相似问题