Sau đây chương trình C++ 11 không ra bất cứ điều gì dưới gcc 4.7.2:C++ 11 `nullptr_t` trở về chức năng được elided?
#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();
}
là hành vi đúng này, hoặc nó là một lỗi biên dịch?
Cập nhật:
Thanks guys. FYI đây là cách giải quyết của tôi:
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 {}; }
Trông giống như một lỗi. 4.8.1 nói ["foo".] (Http://coliru.stacked-crooked.com/a/d8448f4acd37eca8) – jrok
Điều này đã xuất hiện ít nhất một lần (và có lẽ chỉ một lần) trên StackOverflow trước đây, chắc chắn là một lỗi trình biên dịch. – GManNickG
Lỗi có biến mất nếu bạn sử dụng 'std :: nullptr_t' thay cho' decltype (nullptr) '? – GManNickG