c – decltype(std)是否合法,是否有目的?
发布时间:2020-12-16 03:38:56 所属栏目:百科 来源:网络整理
导读:当在命名空间周围使用decltype时,我可以编写编译代码,但是该语句在g 4.9.1下似乎没有任何效果,它会产生错误:意外命名空间名称’std’:expected expression 例如,以下所有的编译都是g,但是程序集不会显示为它们生成的任何代码. using s = decltype(std);aut
当在命名空间周围使用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 %zun",sz+1); std::printf("this type is: %snn",n.c_str()); // the only limit is your imagination int f(); std::ostream trash = f(typeid(decltype(std)) * 10 - 6 ^ typeid(decltype(std))); 如果g是正确的允许这个?如果是这样,代码消失的优点是什么,而不是导致编译时错误? 解决方法
不,这不合法.语法允许的两个decltype-specifier表单是(N3690,§7.1.6.2/ 1):
并且命名空间名称不是表达式. 我引用的段落来自C 11标准草案,所以decltype(auto)不适用于C 11.答案是一样的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |