我对C++20中的概念(concept)还不太熟悉,但从我看到的示例中,这段代码应该能够正常工作...
#include <iostream>
#include <string>
#include <concepts>
#include <memory>
using namespace std;
struct hasToString
{
string toString()
{
return __FUNCTION__;
}
};
struct noToString
{
};
template<typename T>
concept has_toString = requires(const T & t)
{
t.toString();
};
template<typename T>
string optionalToString(const T &obj)
{
if constexpr (has_toString<T>)
return obj.toString();
else
return "toString not defined";
}
int main()
{
hasToString has;
unique_ptr<noToString> hasnt = make_unique<noToString>();
cout << optionalToString(has) << '\n';
cout << optionalToString(hasnt) << '\n';
}
期望输出:
hasToString::toString
未定义 toString
但实际输出为:
未定义 toString
未定义 toString
在这个简单的示例中,我做错了什么?我已经选择了 std:c++latest 作为 C++ 语言标准。