Код: Выделить всё
template
class Foo {
public:
Foo(intmax_t initialValue = 0);
template
Foo(const Foo &other);
};
Код: Выделить всё
explicit Foo(intmax_t initialValue = 0);
Но, реализовав остальную часть класса, я понял, что для конкретного случая, когда M == 0, имеет смысл разрешать присваивать экземпляру класса любое число, и на самом деле это значительно упростит некоторые задачи. Нет проблем, я использую C++20, я могу просто сделать явное условие.
Код: Выделить всё
template
explicit (Mx != 0)
Foo(intmax_t initialValue = 0);
Я почти на 90 % уверен, что проблема в параметре N. Он не знает, какую ценность ему придать. Я попробовал скомпилировать класс без N в шаблоне, и все сработало нормально. (Ну, он выдал мне предупреждение о том, что неявный оператор присваивания копии устарел, но он все равно скомпилировался, запустился и дал ожидаемые результаты.)
Дело в том, что особый случай M == 0, тогда N вообще не имеет значения и может быть чем угодно.
Итак, правильно ли я думаю?, Если Итак, как мне приказать ему просто назначить 0 или что-то еще для N, когда M == 0 во время неявного преобразования, и при этом запретить присвоение, когда M != 0?
Подробнее здесь: https://stackoverflow.com/questions/791 ... conversion
Мобильная версия