Я сократил свой код до этого очень короткого примера:
template<class ...F>
struct A
{
A(std::convertible_to<std::tuple<std::string, F>> auto&&... actions);
std::tuple<std::tuple<std::string, F>...> _actions;
};
template<class ...F>
A<F...>::A(std::convertible_to<std::tuple<std::string, F>> auto&&... actions)
: _actions{ std::tuple{ actions... } }{}
Я не вижу в этом ничего плохого. Но clang (-std=c++23) выдает такую ошибку:
<source>:13:66: error: pack expansion contains parameter packs 'actions:auto' and 'F' that have different lengths (1 vs. 0)
13 | A<F...>::A(std::convertible_to<std::tuple<std::string, F>> auto&&... actions)
| ~ ^ ~~~~~~~
<source>:13:10: note: while calculating associated constraint of template '' here
13 | A<F...>::A(std::convertible_to<std::tuple<std::string, F>> auto&&... actions)
| ^
<source>:13:10: error: out-of-line definition of 'A<F...>' does not match any declaration in 'A<F...>'
13 | A<F...>::A(std::convertible_to<std::tuple<std::string, F>> auto&&... actions)
| ^
2 errors generated.
Все компиляторы принимают вашу программу
При использовании проводника компилятора для отображения программы всегда используйте магистраль. Вы также можете добавить туда следующую последнюю версию. Без какой-либо реализации программа может быть IFNDR.
@PepijnKramer Что ты имеешь в виду? Допускается определение конструктора вне строки.
Суммируя комментарии пользователя 12002570, это ошибка Clang 18, которая уже исправлена в багажнике.
@HolyBlackCat Это так... :) Но нвм... Я тоже допускал ошибки
@user12002570 user12002570 -- Я не могу использовать транк, вижу ошибку в версиях 17 и 18.
@Gene Да, я вижу это в этой демонстрации. версия 18 отклоняет код, но магистраль его принимает. Итак, они это исправили.
Похоже, это ошибка Clang, которая была исправлена в последней версии Clang Trunk. Демо
Всегда публикуйте код драйвера (особенно с шаблонами, иначе они не будут созданы), который показывает, как вы должны их использовать. Это также сделает вопрос более ясным, поскольку люди смогут предлагать другие альтернативы.