当在命名空间周围使用decltype时,我可以编写编译代码,但是该语句在g 4.9.1下似乎没有任何效果,它会产生错误:意外命名空间名称’std’:expected expression
例如,以下所有的编译都是g,但是程序集不会显示为它们生成的任何代码.
using s = decltype(std); auto n = typeid(decltype(std)).name(); auto sz = n.size(); std::printf("size is %zu\n",sz+1); std::printf("this type is: %s\n\n",n.c_str()); // the only limit is your imagination int f(); std::ostream trash = f(typeid(decltype(std)) * 10 - 6 ^ typeid(decltype(std)));
解决方法
不,这不合法.语法允许的两个decltype-specifier表单是(N3690,§7.1.6.2/ 1):
decltype-specifier:
decltype
( expression )
decltype ( auto )
并且命名空间名称不是表达式.
我引用的段落来自C 11标准草案,所以decltype(auto)不适用于C 11.答案是一样的.
原文地址:https://www.jb51.cc/c/110800.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。