【发布时间】:2020-09-08 17:57:30
【问题描述】:
我是 C++20 概念的新手,但从我看到的示例来看,这段代码应该可以工作......
#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++ 语言标准。
【问题讨论】:
标签: c++ visual-studio c++20 concept