Cuando tratando de compilar este código (CRTP-like) con GCC 4.6.0:plantilla de clase llamado X en la clase de plantilla
template<template<class> class T> struct A;
template<class T>
struct B: A<B<T>::template X> {
template <class U> struct X { U mem; };
};
B<int> a;
tengo la ErrorMessage "test.cpp: 3: 26: error: ninguna plantilla de clase llamada 'X' en 'struct B <int>' ". ¿Por qué X parece ser invisible fuera de la definición de la clase?
Mi compilador tiene un problema con esto: : A < B :: plantilla X> La X es un identificador no declarado. Francamente, estoy confundido por su sintaxis, ¿qué se supone que es B :: plantilla? Además de que nunca he visto: plantilla clase T. En todo caso, creo que voy a aprender algo de ti; ¿Puedes explicar la importancia de la sintaxis? ¿Qué hacen? –
leetNightshade
No estoy seguro, pero quizás la respuesta de Johannes sobre este tema podría ayudar aquí: http://stackoverflow.com/questions/4420828/another-bug-in-g-clang-c-templates-are-fun – Nawaz
@leetNightshade : No estoy seguro pero creo que tu mensaje de error está diciendo lo mismo que el mío: que X no es visible fuera de B (así es como lo entiendo de todos modos). Acerca de su segunda pregunta: "plantilla clase T" significa que T es una plantilla en sí misma. De esa manera puedes usar algo como T dentro de la definición de clase de A. –