Сообщение Re: Распечатать compile-time константу в выводе компилятора от 17.01.2023 10:58
Изменено 17.01.2023 11:01 rg45
Re: Распечатать compile-time константу в выводе компилятора
Здравствуйте, koenjihyakkei, Вы писали:
K>
K>Но мне кажется есть более простой вариант сделать это проще и сразу на месте, без объявления класса?
Можно использовать несоответствие типов формальных и фактических параметров, чтоб спровоцировать ощибку вида: "cannon convert 'A' to 'B'". Осталось только подобрать какую-нибудь функцию, желательно из стандартной библиотеки, чтоб не объявлять свои. Нарпимер printf:
MSVC: "cannot convert argument 1 from 'std::integral_constant<int,42>' to 'const char"
GCC: "invalid user-defined conversion from 'std::integral_constant<int, 42>' to 'const char*'"
K>
K>error: implicit instantiation of undefined template 'Foo<64>'
K>
K>Но мне кажется есть более простой вариант сделать это проще и сразу на месте, без объявления класса?
Можно использовать несоответствие типов формальных и фактических параметров, чтоб спровоцировать ощибку вида: "cannon convert 'A' to 'B'". Осталось только подобрать какую-нибудь функцию, желательно из стандартной библиотеки, чтоб не объявлять свои. Нарпимер printf:
const int ParameterToPrint = 42;
std::printf(std::integral_constant<int, ParameterToPrint>{});
MSVC: "cannot convert argument 1 from 'std::integral_constant<int,42>' to 'const char"
GCC: "invalid user-defined conversion from 'std::integral_constant<int, 42>' to 'const char*'"
Re: Распечатать compile-time константу в выводе компилятора
Здравствуйте, koenjihyakkei, Вы писали:
K>
K>Но мне кажется есть более простой вариант сделать это проще и сразу на месте, без объявления класса?
Можно использовать несоответствие типов формальных и фактических параметров, чтоб спровоцировать ощибку вида: "cannon convert 'A' to 'B'". Осталось только подобрать какую-нибудь функцию, желательно из стандартной библиотеки, чтоб не объявлять свои. Нарпимер printf:
http://coliru.stacked-crooked.com/a/0175402ff442e85d
MSVC: "cannot convert argument 1 from 'std::integral_constant<int,42>' to 'const char"
GCC: "invalid user-defined conversion from 'std::integral_constant<int, 42>' to 'const char*'"
K>
K>error: implicit instantiation of undefined template 'Foo<64>'
K>
K>Но мне кажется есть более простой вариант сделать это проще и сразу на месте, без объявления класса?
Можно использовать несоответствие типов формальных и фактических параметров, чтоб спровоцировать ощибку вида: "cannon convert 'A' to 'B'". Осталось только подобрать какую-нибудь функцию, желательно из стандартной библиотеки, чтоб не объявлять свои. Нарпимер printf:
http://coliru.stacked-crooked.com/a/0175402ff442e85d
const int ParameterToPrint = 42;
std::printf(std::integral_constant<int, ParameterToPrint>{});
MSVC: "cannot convert argument 1 from 'std::integral_constant<int,42>' to 'const char"
GCC: "invalid user-defined conversion from 'std::integral_constant<int, 42>' to 'const char*'"