使用概念检查是否存在全局函数

时间:2020-10-11 19:19:30

标签: c++ c++20 c++-concepts

我可以创建一个概念来检查名为to_string()的成员函数的存在,该成员函数在struct / class中返回std :: string。

template<typename T>
concept method_to_string = requires(T v)
{
    { v.to_string() } -> std::same_as<std::string>;
};

我想创建一个概念,该概念检查名为to_string的全局函数的存在,该函数接受T,并返回std :: string。我没做到我使用gcc 10.2作为编译器。

我的猜测是我看起来像这样,但是失败了:

template<typename T>
concept function_to_string = requires(T v)
{
    to_string(const T&) -> std::same_as<std::string>;
};

1 个答案:

答案 0 :(得分:3)

这似乎起作用:

template<typename T>
concept method_to_string = requires(T v)
{
    { to_string(v) } -> std::same_as<std::string>;
};

https://gcc.godbolt.org/z/7WdTjf