我在此处重新发布comp.std.c++ Usenet discussion,因为该组已变得非常不可靠。我在那里提交的最后几篇帖子已经进入空白,活动几乎停止。我怀疑我被禁止了,或者其他人都失去了兴趣。希望所有感兴趣的人都能找到这个讨论,并且会有一个全面的移民。也许他们会任命一位新的主持人。C++ 0x:条件运算符,xvalues和decltype
您好!
用我目前的草案N3126 w.r.t.条件 操作者和xvalues,我期望以下断言持有:
int i = 0;
int& j = true? i : i;
int&& k = true? std::move(i) : std::move(i); // #2
assert(&i == &j); // Holds since C++98
assert(&i == &k); // Should this hold as well?
5.16/4表示:
如果第二和第三个操作数[给 条件运算符]是 glvalues相同的值的类别 并具有相同类型,则结果是,类型和值的类别 [...]
虽然它并没有明确说明所得到的glvalue是指 glvalue操作数引用的对象之一 - 或者这是暗示的 ,否则它会返回一个prvalue?在C++ 0x模式下使用GCC 4.5.1 ,第二个断言失败。参考k似乎是 引用了一些临时对象。如果冒号周围的两个操作数 都是相同类型的xvalues,是否有人可以澄清是否允许 comiler创建这样的临时文件?
我目前假设GCC是buggy和/或不是最新的方面 xvalues。
后续问题是:能够检测表达式的值类别 不是很好吗?如果我们忽略条件运算符 ,我们可以用decltype检测表达式的值类别。但是 什么是
bool xvalue = std::is_rvalue_reference<
decltype(true ? std::move(i) : std::move(i)) >::value;
应该会产生?使用GCC 4.5.1,xvalue变量被初始化为 ,并且为false。这是否符合当前的标准草案?
TIA, 塞巴斯蒂安
我想你的意思[comp.std.C++],通过你的链接所暗示的。是的,它确实有一些滞后时间,但我想你可能刚刚遇到最近的谷歌停电事件。您是否通过Google网上论坛发布? – 2010-10-11 20:41:30
@Alf:我是通过Google网上论坛发布的,但是不会影响所有组?自9月以来,comp.std.C++几乎没有任何活动,对于未经审查的组而言并非如此。 – Potatoswatter 2010-10-11 20:48:36
从这里c.l.C++在我的本地“today”中有30个帖子,c.s.C++有两个(其中一个来自“SG”,其中一个似乎是你),另外五个消息来自本月其他人。 – sbi 2010-10-11 20:49:03