BFE>Это корректный код или нет? И почему некоторые компиляторы его не компилируют?
корректный
потому что у тех некоторых компиляторах сотни таких же багов которые с 13 годов не фиксятся, даже если конфирмед
и даже студия уже в инсталляторе предлагает правильный кланг
потому что не каждый корректный код msvc может скомпилить
ну а гцц так и подавну
Здравствуйте, reversecode, Вы писали:
BFE>>Это корректный код или нет? И почему некоторые компиляторы его не компилируют?
R>корректный
Это точно? Я вот в чём не уверен:
template<class... Parameter> // тут мы получили имя Parametertemplate<Parameter... Value> // а тут разве Parameter... связан как-то с Parameter ? Вроде бы это независимые имена. Или нет? bool Outer<Parameter...>::Inner<Value...>::Member = true;
Здравствуйте, B0FEE664, Вы писали:
R>>корректный BFE>Это точно? Я вот в чём не уверен: BFE>
BFE>template<class... Parameter> // тут мы получили имя Parameter
BFE>template<Parameter... Value> // а тут разве Parameter... связан как-то с Parameter ? Вроде бы это независимые имена. Или нет?
BFE>bool Outer<Parameter...>::Inner<Value...>::Member = true;
BFE>
представь что Parameter не parameter pack а конкретный тип:
template<typename T>
template<T Value> // тут T как-нибудь связан с внешним?bool Outer<T>::Inner<Value>::Member = true;
Здравствуйте, night beast, Вы писали:
R>>>корректный BFE>>Это точно? Я вот в чём не уверен: BFE>>
BFE>>template<class... Parameter> // тут мы получили имя Parameter
BFE>>template<Parameter... Value> // а тут разве Parameter... связан как-то с Parameter ? Вроде бы это независимые имена. Или нет?
BFE>>bool Outer<Parameter...>::Inner<Value...>::Member = true;
BFE>>
NB>представь что Parameter не parameter pack а конкретный тип: NB>
NB>template<typename T>
NB>template<T Value> // тут T как-нибудь связан с внешним?
NB>bool Outer<T>::Inner<Value>::Member = true;
NB>
Я могу и такое вот представить:
template<typename T>
template<int Value> // тут int и T как-нибудь связаны?bool Outer<T>::Inner<Value>::Member = true;
Здравствуйте, B0FEE664, Вы писали:
BFE>>>Это корректный код или нет? И почему некоторые компиляторы его не компилируют?
R>>корректный BFE>Это точно? Я вот в чём не уверен: BFE>
BFE>template<class... Parameter> // тут мы получили имя Parameter
BFE>template<Parameter... Value> // а тут разве Parameter... связан как-то с Parameter ? Вроде бы это независимые имена. Или нет?
BFE>bool Outer<Parameter...>::Inner<Value...>::Member = true;
BFE>
Хороший вопрос. Но если его устранить — все равно гцц не компилит
template<class... Parameter> struct Outer
{
template<Parameter... Value0> struct Inner
{
static bool Member;
};
template<Parameter... Value>
void f()
{
using Inn = Inner<Value...>; // error: expansion pattern 'Value0' contains no parameter packs
//bool b = Inner<Value...>::Member;
}
};
Здравствуйте, B0FEE664, Вы писали:
BFE>Это точно? Я вот в чём не уверен: BFE>
BFE>template<class... Parameter> // тут мы получили имя Parameter
BFE>template<Parameter... Value> // а тут разве Parameter... связан как-то с Parameter ? Вроде бы это независимые имена. Или нет?
BFE>bool Outer<Parameter...>::Inner<Value...>::Member = true;
BFE>
Всё тут корректно. Даже в старых стандартах аналогичное работало