Jest to kod:Forward deklaracja klasy stosowanych w funkcji szablonu nie jest kompilowany przez brzękiem ++
class A;
template <class T>
void fun() {
A a;
}
class A {
public:
A() { }
};
int main() {
fun<int>();
return 0;
}
g ++ 4.5 i 4.7 g ++ kompiluje to bezbłędnie. Ale clang ++ 3.2 (trunk) daje ten błąd:
main.cpp:5:6: error: variable has incomplete type 'A'
A a;
^
main.cpp:1:7: note: forward declaration of 'A'
class A;
^
Który kompilator jest wtedy zgodny ze standardem C++?
Ponieważ próbujesz utworzyć obiekt typu "A", kompilator musi znać jego rozmiar, którego nie może poznać bez obejrzenia pełnej definicji, więc klang będzie tutaj (ale nie mam referencji) . –
Czy jest jakiś przełącznik dostarczony przez clang, aby skompilować taki kod? – Sashank