c++ - 访问检查如何在类型别名模板中工作?
问题描述
考虑这段代码:
struct A
{
template <typename T>
using type = decltype(&T::foo);
};
class B
{
void foo() {}
friend A;
};
int main()
{
A::type<B> x;
}
它在 GCC 和 MSVC 上编译,但让 Clang 抱怨:error: 'foo' is a private member of 'B'
.
它是一个 Clang 错误吗?我该如何解决这个问题?
编辑:副本不提供解决方法,所以这里是一个。
struct A
{
template <typename T>
static decltype(&T::foo) helper();
template <typename T>
using type = decltype(helper<T>());
};
class B
{
void foo() {}
friend A;
};
int main()
{
A::type<B> x;
}
解决方案
推荐阅读
- c++ - 用于多人游戏的可扩展登录/大厅服务器
- vba - 从宏文件中的动态下拉列表中选择数据
- javascript - 在 HTML 中为表动态创建的行显示延迟
- python - 我不知道如何为我的编程语言设置文件扩展名(内置 python)
- django - 多个表单的 CreateView form_invalid?
- mongodb - Mongodb Atlas Google Cloud 对等互连失败,本地网络中的 ip 范围与活动对等方中的 ip 范围重叠
- r - R中另一列中的组的列中的总和值
- python - 使用 pytest + Pycharm 处理长字符串的烦人差异格式
- android - 使用按钮和百分比填充投票投票 Android Kotlin
- reactjs - 在 NextJS 中重用父组件的导航