type(const T & h) : type(std::string(h.h)) {}
В конструктор от const std::string & передают массив. Че он бузит то?
ты рекурсивный вызов сделал шаблонного конструктора
Аааа! Понял. Я передал ему holder. Он инстанцировал шаблон с этим типом, вытащил из этого типа его член h, посмотрел на его тип (char[7]), понял, что у него нет конструктора с таким типом аргумента и пошел еще раз инстанцировать... Вот жеж хрень...
У тебя конструктор с стд стринг проигрывает, потому что ему надо констрактить объект
Чуть исправил пример, проблема та же, вопрос в коде
можно путем явного задания типа
что мешает перегрузить для template <size_t N> constructor((char& arr)[N])?
Мешает то, что это в другой либе происходит, а я только пользуюсь ей.
Ну либа какая-то странная...
Вы считаете, что правильно было бы в шаблоне конструктора, который делегирует другому конструктору, явно привести параметр в нужный тип перед делегированием?
значит, что шаблонный конструктор предполагает наличие точных специализацированных конструкторов, если, конечно, библиотека не кустарщина какая-то
Это да. Но просто я же могу передать в шаблон конструктора тип, в котором будет поле такого типа, что оно умеет кастоваться в какой-то специализированный тип, для которого есть конструктор. Но при этом я получу ошибку, как в показанном выше примере.
А как должен работать доступ к static через точку?
Анатолий, попробовал эту подсказку. И получил ошибку компиляции 🤪. Естественно, в годболте воспроизвести ее не могу, потому что все законно. Ошибка та же, кстати, что и при рекурсивном вызове.
А в чем проблема? Это же такой же член класса. Только общий.
статик не является полем объекта
Оно как бы объекту не принадлежит, но объект позволяет к нему обратиться.
Да, засомневался и тоже у себя уже попробовал. Просто среда задумалась и после ввода точки не дала выбрать имя. Не встречался никогда просто такой способ обращения к статическим полям \ методам или внимания не обращал
Обсуждают сегодня