Czy używanie funkcji decltype
z wskaźnikami funkcji wirtualnego członka jest zgodne z prawem?Używanie typu decltype ze wskaźnikami funkcji wirtualnego członka
Poniższy kod powoduje wygenerowanie wewnętrznego błędu (C1001) za pomocą VS2012.
struct C
{
virtual void Foo() {}
typedef decltype(&C::Foo) type; //pointer
}
Ale to kompiluje grzywny:
struct C
{
virtual void Foo() {}
typedef decltype(C::Foo) type; //not pointer
}
Czy to błąd?
To było "nielegalne", wygenerowałoby komunikat o błędzie, a nie błąd wewnętrzny. Najwyraźniej znalazłeś błąd w kompilatorze. – AnT
@AndreyT: +1, chciałbym dodać, że: * nawet jeśli było to nielegalne, nie powinno powodować błędu wewnętrznego *. –