¿Por qué una clase no puede tener un decltype
en la lista de herencia? Por ejemplo, yo esperaría que el siguiente código para hacer A<B>
Heredar del RType
, pero con G ++ 4.6.1 (usando -std=c++0x
) no compila:¿Por qué una clase no puede heredarse del resultado de un decltype?
#include <type_traits>
template<typename T>
class A : public decltype(std::declval<T>().hello()) { };
class RType { };
class B {
public:
RType hello() { return RType(); }
};
int main() {
A<B> a;
}
Se da el siguiente resultado:
test.cpp:6:18: error: expected class-name before 'decltype'
test.cpp:6:18: error: expected '{' before 'decltype'
test.cpp:6:54: error: expected unqualified-id before '{' token
test.cpp: In function 'int main()':
test.cpp:16:7: error: aggregate 'A<B> a' has incomplete type and cannot be defined
El uso de declval
es solo para proporcionar una instancia donde necesitó utilizar decltype
, pero también fallan otros usos de decltype
(es decir, sin declval
).
¿Has probado gcc 4.7, clang o algún otro compilador? gcc aún no es totalmente compatible con C++ 11 ... – PlasmaHH
@PlasmaHH En realidad estoy tratando de compilar clang ahora (por otras razones) pero con MSVC++ 2010 no funciona. –