Clang++-3.7 Ошибка компиляции CRTP "без имени члена" в аргументе шаблона родителя
В приведенном ниже коде я пытаюсь использовать CRTP для использования статического члена "значение" из класса Child в классе Parent. При компиляции кода с g++ 5.2.1 с флагом "-pedantic" я могу компилировать как положено, и при выполнении c.print_value();
а также Child<int,4>::print_value();
распечатать 4.
#include <iostream>
template <typename DE>
struct Parent
{
static const int value = DE::value;
static void print_value ()
{
std::cout << "Value : " << value << '\n';
}
};
template <typename T, int N>
struct Child : Parent< Child<T,N> >
{
static const int value = N;
};
int
main ()
{
Child<int,4> c;
c.print_value();
Child<int,4>::print_value();
}
Однако при компиляции того же кода с помощью clang++3.7 я сталкиваюсь с ошибками компиляции.
crtp_clang_error.cpp:9:32: error: no member named 'value' in 'Child<int, 4>'
static const int value = DE::value;
~~~~^
crtp_clang_error.cpp:27:16: note: in instantiation of template class 'Parent<Child<int, 4> >' requested here
struct Child : Parent< Child<T,N> >
^
crtp_clang_error.cpp:38:16: note: in instantiation of template class 'Child<int, 4>' requested here
Child<int,4> c;
^
crtp_clang_error.cpp:40:3: error: no member named 'print_value' in 'Child<int, 4>'; did you mean 'Parent<Child<int, 4> >::print_value'?
Child<int,4>::print_value();
^~~~~~~~~~~~~~~~~~~~~~~~~
Parent<Child<int, 4> >::print_value
crtp_clang_error.cpp:11:15: note: 'Parent<Child<int, 4> >::print_value' declared here
static void print_value ()
Я не уверен, является ли это ошибкой Clang ++ или взломом GCC. Был бы очень признателен за некоторые идеи.