2013-09-06 26 views
5

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 {}; } 
+1

Trông giống như một lỗi. 4.8.1 nói ["foo".] (Http://coliru.stacked-crooked.com/a/d8448f4acd37eca8) – jrok

+2

Đ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

+0

Lỗi có biến mất nếu bạn sử dụng 'std :: nullptr_t' thay cho' decltype (nullptr) '? – GManNickG

Trả lời

Các vấn đề liên quan