Как избежать неявного преобразования в концепциях C++?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как избежать неявного преобразования в концепциях C++?

Сообщение Anonymous »

Есть ли способ предотвратить неявные преобразования концепций? Например, этот пример компилируется с помощью GCC и clang, когда я действительно хочу, чтобы он выдал ошибку, связанную с отсутствием конструктора char:

Код: Выделить всё

template
concept specific_constructors = requires {
T(int{}, char{});
T(int{});
T(char{});
};

struct test {
test(int a_, char b_): a{a_}, b{b_} {}
explicit test(int a_): a{a_}, b{} {}
//explicit test(char b_): a{}, b{b_} {}
private:
int a;
char b;
};

auto main() -> int {
specific_constructors auto const v1 {test{1,'a'}};
}
В настоящее время я думаю о простом заключении символа в структуру или об использовании строгого типа, но я ищу любые другие доступные варианты.

РЕДАКТИРОВАТЬ:
Просто для некоторой ясности, вопрос в том, как мне написать концепцию define_constructors, чтобы она не работала для класса test, поскольку в нем нет конструктора char.

Подробнее здесь: https://stackoverflow.com/questions/798 ... c-concepts
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»