Информация об изменениях

Сообщение Re: Распечатать compile-time константу в выводе компилятора от 17.01.2023 10:58

Изменено 17.01.2023 11:01 rg45

Re: Распечатать compile-time константу в выводе компилятора
Здравствуйте, koenjihyakkei, Вы писали:

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>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*'"