相关疑难解决方法(0)

朋友、私有函数、模板别名和 decltype ……clang 拒绝这个是否正确?

在以下代码中(godbolt 链接):

#include <utility>

struct Friend {
    class Inner {
        friend struct Friend;

        int function() { return 0; }
    };

    using DirectResult = decltype(std::declval<Inner>().function());

    template <typename T>
    using IndirectResult = decltype(std::declval<T>().function());
};

int main() {
    Friend::DirectResult direct{};
    Friend::IndirectResult<Friend::Inner> indirect{};
    return direct + indirect;
}
Run Code Online (Sandbox Code Playgroud)

Clang 对 的使用非常满意DirectResult,但会抱怨IndirectResult试图访问 的private函数Inner

<source>:13:55: error: 'function' is a private member of 'Friend::Inner'    
    using IndirectResult = decltype(std::declval<T>().function());
                                                      ^
<source>:18:13: note: in instantiation of template type alias …
Run Code Online (Sandbox Code Playgroud)

c++ friend language-lawyer

6
推荐指数
1
解决办法
301
查看次数

标签 统计

c++ ×1

friend ×1

language-lawyer ×1