Considérez le code suivant (il n'est donné qu'à titre d'exemple) :
#include
#include
#include
template <
class Crtp,
class Vector = typename std::decay().data())>::type,
class Scalar = typename std::decay().data(0))>::type
>
struct Base
{;};
template <
class Vector = std::array,
class Scalar = typename std::decay()[0])>::type
>
struct Derived
: public Base>
{
Vector _data;
inline Vector& data() {return _data;}
inline const Vector& data() const {return _data;}
inline Scalar& data(const unsigned int i) {return _data[i];}
inline const Scalar& data(const unsigned int i) const {return _data[i];}
};
int main()
{
Derived<> d;
return 0;
}
Il retourne l'erreur suivante :
main.cpp: In instantiation of 'struct Derived<>':
main.cpp:28:14: required from here
main.cpp:16:8: error: invalid use of incomplete type 'struct Derived<>'
main.cpp:16:8: error: declaration of 'struct Derived<>'
Y a-t-il un moyen de résoudre ce problème (sans utiliser de typedefs et uniquement des templates) ?