c++ - 模板函数中出现警告 C4091
问题描述
我有在 VS-2010 中编译的代码,没有警告:
class MyClass {
public:
class InternalClass;
};
class MyClass::InternalClass {
};
template<class QWERTY>
void Func( QWERTY& arg )
{
typename QWERTY::InternalClass;
}
int main()
{
MyClass var;
Func( var );
return 0;
}
现在我在 VS-2017 中编译这段代码并得到警告 4091:
warning C4091: '': ignored on left of 'MyClass::InternalClass' when no variable is declared
如果我想继续进行类型检查(并且不想要警告:)),我应该怎么做?
解决方案
一种简单的方法
template <class QWERTY,
typename SFINAE = typename QWERTY::InternalClass>
void Func( QWERTY& arg )
{
}
陷阱是Func<int, void>(i)
正确的。
一种更正确(也更冗长)的方式是:
template <class QWERTY,
std::enable_if_t<hasInternalClass<QWERTY>::value, void*> = nullptr>
void Func(QWERTY& arg)
{
}
具有适当的特征。
推荐阅读
- object - 在 Raku 中克隆对象
- mysql - Laravel Eloquent:如何计算嵌套关系
- css - 通过 css 移动图像
- vue.js - Vue中如何平滑过渡?
- c# - 更新到 httpRuntime targetFramework="4.7.2" 时出现 Webforms InvalidOperationException
- html - 如何在响应的同时使背景上的文本保持在其边界内
- python - 预测建模脚本中的 Pandas SettingWithCopyWarning
- sql - postgres 标志 transform_null_equals=on 在 JDBC 特定情况下失败
- mysql - 查找用户流式传输的总小时数
- javascript - 当我在动态路由上按 Enter 时,VueJS 动态路由隐藏?