tl::unexpected推导指引在Clang编译失败但GCC可通过的问题
tl::unexpected推导指引在Clang下编译失败问题
我在使用tl::expected库时,希望在.cpp文件中为创建特定类型的tl::unexpected定义推导指引,示例代码如下:
class MyError { public: enum ErrorType : int { none, type1, type2 }; MyError (ErrorType type, const std::string& description) { } }; template<typename T> tl::unexpected (MyError::ErrorType, const T&)->tl::unexpected<MyError>;
这段代码在GCC 11至14版本中可正常编译,但在Clang 14至18版本编译失败,且返回的错误信息不符合语法逻辑。将MyError::ErrorType替换为int后,错误信息发生变化,但仍无法编译。
不过以下简单的模板推导指引示例可在Clang中正常编译:
template<typename T1, typename T2> class C { private: T1 a; T2 b; }; template<typename T> C (int, const T&)->C<int, const T&>;
我无法确定问题出在推导指引、tl::expected实现还是Clang本身。
内容的提问来源于stack exchange,提问作者Nuclear
相关产品推荐
相关产品推荐

