Функция, которую я хочу написать, имеет несколько пакетов типа переменных, поэтому я использую типы тегов без данных, чтобы явно указывать элементы каждого пакета типа. (оба с использованием багажника, std = c ++ 26) < /p>
template
struct SVariadicTypeset
{};
template
void moo(SVariadicTypeset, SVariadicTypeset, As ... a_s, Bs ... b_s);
void baa()
{
moo(SVariadicTypeset< >{}, SVariadicTypeset< >{}); // ok
moo(SVariadicTypeset{}, SVariadicTypeset< >{}, 1); // fails on g++
moo(SVariadicTypeset< >{}, SVariadicTypeset{}, 2); // ok
moo(SVariadicTypeset{}, SVariadicTypeset{}, 1, 2); // fails on g++
}
< /code>
через компилятор Explorer < /p>
Это законное C ++? < /p>
g ++.:6:6: note: template argument deduction/substitution failed:
:11:20: note: inconsistent parameter pack deduction with '' and ''
< /code>
утверждая '' и '' несовместимые, кажется, ошибка, верно? Итак, я предполагаю, что G ++ - плохо себя по себе.
Подробнее здесь: https://stackoverflow.com/questions/796 ... ls-clang-a