2013-07-10 3 views
2

Зачем возникает ошибка?Почему ошибка в этом простом шаблоне?

#include <type_traits> 

template<typename FooType> 
struct bar { 
    using bar_type = typename FooType::foo_type; 
}; 

template<typename T> 
struct foo { 
    using foo_type = T; 

    //Error: No type named 'bar_type' in 'bar<foo<int> >' 
    static_assert(std::is_same<foo_type,typename bar<foo<T>>::bar_type>::value,""); 
}; 

int main(int argc, char **argv) 
{ 
    bar<foo<int>> b; 
    return 0; 
} 
+0

[Соответствующий вопрос] (http://stackoverflow.com/q/17478621/420683) – dyp

ответ

5

В точке static_assert, foo еще не полный тип (вы все еще в его определении), поэтому, когда bar пытается достичь в компилятор дает ошибку. Конкретная ошибка, которую она дает вам отстой; попробуйте его с другим компилятором.

+3

Как отметил Йоханнес Шауб в своем [ответе] (http://stackoverflow.com/a/17497838/420683) на вопрос, который я связал в комментарии к OP, он может даже быть * явно не указан * стандартом. Если это незаконно или нет. – dyp

+0

Интересно, я этого не знал. Я просто посмотрел на код, подумал о модели создания Клана и описал проблему, которую я видел. –

Смежные вопросы