C++11 'nullptr_t' 返回函数被省略

C++11 `nullptr_t` returning function being elided?

本文关键字:函数 nullptr C++11 返回      更新时间:2023-10-16

以下 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 {}; }

这是 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 完整修复程序。