2013-09-06 10 views
5

Poniższy C++ 11 Program nie emituje nic pod gcc 4.7.2:C++ 11 Zwracana funkcja zwrotu `nullptr_t`?

#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(); 
} 

Czy to poprawne zachowanie, czy też jest to błąd kompilatora?

Aktualizacja:

Dzięki chłopaki. FYI tutaj jest moje obejście:

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

Wygląda jak błąd. 4.8.1 mówi ["foo".] (Http://coliru.stacked-crooked.com/a/d8448f4acd37eca8) – jrok

+2

To pojawiło się co najmniej raz (i prawdopodobnie tylko raz) na StackOverflow przed, zdecydowanie błąd kompilatora. – GManNickG

+0

Czy błąd zniknie, jeśli użyjesz 'std :: nullptr_t' zamiast' decltype (nullptr) '? – GManNickG

Odpowiedz