首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解密(Std)是合法的,它有什么目的吗?

解密(Std)是合法的,它有什么目的吗?
EN

Stack Overflow用户
提问于 2014-09-30 15:26:35
回答 1查看 325关注 0票数 9

当在命名空间中使用decltype时,我可以编写编译代码,但是语句在g++4.9.1下似乎没有任何效果,而在clang下则生成error: unexpected namespace name 'std': expected expression

例如,以下所有代码都是在g++下编译的,但是程序集没有显示为它们生成的任何代码。

代码语言:javascript
复制
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)));

如果g++允许这样做是对的呢?如果是这样,代码消失而不是导致编译时错误的好处是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-30 15:30:47

不,这不合法。语法允许的两个解密类型说明符形式是(N3690,§7.1.6.2/1):

解密-说明符: decltype (表达式) decltype ( auto )

名称空间名称不是表达式。

我引用的这一段来自一个标准的C++11草稿,所以decltype(auto)不适用于C++11,但答案是一样的。

票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26124547

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档