[[nodiscard]]
属性会鼓励编译器发出警告,如果它在被丢弃的表达式中使用而不是强制转换为voID.例: [[nodiscard]] int callable_return_not_discardable(int n){ return n; }int main(){ callable_return_not_discardable(0); // warning/error: // ignoring return value of 'int callable_return_not_discardable(int)',// declared with attribute nodiscard [-Wunused-result] (voID) callable_return_not_discardable(0); // OK}
现场演示于gcc-8和clang-7.
这是很好用的,直到添加了一个额外的间接层:模板:
template<class Callable>voID invoke_with_answer(Callable&& callable){ callable(42); }[[nodiscard]] int callable_return_not_discardable(int n){ return n; }int main(){ invoke_with_answer(callable_return_not_discardable); // OK}
现场演示于gcc-8和clang-7.
我的问题是:
这是一个缺少的功能,是什么模板是或应该clang和gcc固定在这里发出警告的结果?
所有意图和目的的模板都不能“看到”该属性.
总结以上是内存溢出为你收集整理的c – 模板忽略[[nodiscard]]属性全部内容,希望文章能够帮你解决c – 模板忽略[[nodiscard]]属性所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)