局部定义友元函数:后置返回类型与requires子句访问成员的Clang编译疑问
模板类友元函数的类型访问问题
这段代码中的所有友元函数均可通过GCC和Visual Studio编译,但Clang在处理带后置返回类型的bar_trailing_return函数时会报错,错误提示为成员访问到不完全类型 'const SS<T>::foo()时编译失败。
疑问点:如果Clang的行为是正确的,为何后置返回类型中不允许访问不完全类型,而requires子句中却允许?
#include <concepts> template<typename T> struct S { T m_t; T const& foo() const& { return m_t; } friend auto bar_auto(S const& s) { return s.foo(); } friend decltype(auto) bar_decltype_auto(S const& s) { return s.foo(); } friend decltype(auto) bar_requires(S const& s) requires std::same_as<T const&, decltype(s.foo())> { return s.foo(); } friend auto bar_trailing_return(S const& s) -> decltype(s.foo()) { // clang error: member access into incomplete type 'const S<int>' return s.foo(); } }; S<int> s{1};
经确认,此问题是Clang的Bug。
内容的提问来源于stack exchange,提问作者wanghan02
相关产品推荐
相关产品推荐

