C ++ 11`nullptr_t`返回函数被省略了?

时间:2013-09-06 20:48:19

标签: c++ gcc c++11

以下C ++ 11程序在gcc 4.7.2下不输出任何内容:

#include <iostream>
using namespace std;

decltype(nullptr) g()
{
    cout << "foo" << endl;
    return nullptr;
}

int* f()
{
    return g();
}

int main(int argc, char** argv)
{
    auto x = f();
}

这是正确的行为,还是编译器错误?

更新

谢谢你们。仅供参考我的解决方法:

 struct NullPointer
 {
     template<class T> operator T*()
     {
          volatile decltype(nullptr) np = nullptr;
          return np;
     }
     operator bool()
     {
          volatile bool b = false;
          return b;
     }
 };

 NullPointer g() { return {}; }

1 个答案:

答案 0 :(得分:2)

这是G ++中的一个错误,它丢弃了类型为nullptr_t

的表达式的副作用

对于G ++ 4.7.4和4.8.0已修复,有关初始未完成修复的信息,请参阅http://gcc.gnu.org/bugzilla/show_bug.cgi?id=52988,有关完整修复的信息,请参阅http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54170