RSS-канал «Форум 'C/C++' на RSDN»
Доступ к архиву новостей RSS-канала возможен только после подписки.
Как подписчик, вы получите в своё распоряжение бесплатный веб-агрегатор новостей доступный с любого компьютера в котором сможете просматривать и группировать каналы на свой вкус. А, так же, указывать какие из каналов вы захотите читать на вебе, а какие получать по электронной почте.
Подписаться на другой RSS-канал, зная только его адрес или адрес сайта.
Код формы подписки на этот канал для вашего сайта:
Последние новости
нужно ли декларировать виртуальный деструктор
2024-04-27 19:18 sergey2b
в наследуемом классе, если он уже задекларирован в родители
с точки зрения хороших практик
constexpr это рекомендация?
2024-04-11 10:58 00011011
Но зачем такое вообще нужно, если компилятор при оптимизации и так пытается вычислить что можно во время компиляции, а если не получается — генерирует код для времени выполнения?
consteval — понятно, строгое требование выполнить функцию во время компиляции и ошибка компиляции если не получается. А constexpr?
constexpr это рекомендация?
2024-04-11 10:58 00011011
Но зачем такое вообще нужно, если компилятор при оптимизации и так пытается вычислить что можно во время компиляции, а если не получается — генерирует код для времени выполнения?
consteval — понятно, строгое требование выполнить функцию во время компиляции и ошибка компиляции если не получается. А constexpr?
Функция, принимающая вложенный класс шаблонного класса.
2024-04-04 06:08 johny5
Не гуглится и не кодится никак. Последнее где я застрял.
template<template<typename> typename T1, typename T2,
template<typename> typename T3, typename T4>
void f(typename T1<T2>::T3<T4> val) { }
template<typename T>
struct A
{
template<typename S>
struct B{};
};
int main() {
f( A<int>::B<void>() );
}
Ошибки:
<source>:17:6: error: no matching function for call to 'f(A<int>::B<void>)'
17 | f( A<int>::B<void>() );
| ~^~~~~~~~~~~~~~~~~~~~~
<source>:7:6: note: candidate: 'template<template<class> class T1, class T2, template<class> class T3, class T4> void f(typename T1<T2>::T3<T4>)'
7 | void f(typename T1<T2>::T3<T4> val) { }
| ^
<source>:7:6: note: template argument deduction/substitution failed:
<source>:17:6: note: couldn't deduce template parameter 'template<class> class T1'
17 | f( A<int>::B<void>() );
| ~^~~~~~~~~~~~~~~~~~~~~
Убирая T3 полностью и заменяя его на явное B — помогает но это не то что нужно. Но и даже в этом случае приходится указывать все шаблонные параметры для вызова f() ручками, что нежелательно потому как весь смысл этой функции — это вывести все эти T1, .. T4 аргументы шаблона автоматически.
Цель работы — написать навороченный принтер типов, когда мы разваливаем входящий шаблон на запчасти, конвертируем в строку вложенные типы (через constexpr std::source_location::function_name()) и склеиваем всё это по какому-то шаблону, и всё в компайл-тайм.
С++ 20++.
Функция, принимающая вложенный класс шаблонного класса.
2024-04-04 06:08 johny5
Не гуглится и не кодится никак. Последнее где я застрял.
template<template<typename> typename T1, typename T2,
template<typename> typename T3, typename T4>
void f(typename T1<T2>::T3<T4> val) { }
template<typename T>
struct A
{
template<typename S>
struct B{};
};
int main() {
f( A<int>::B<void>() );
}
Ошибки:
<source>:17:6: error: no matching function for call to 'f(A<int>::B<void>)'
17 | f( A<int>::B<void>() );
| ~^~~~~~~~~~~~~~~~~~~~~
<source>:7:6: note: candidate: 'template<template<class> class T1, class T2, template<class> class T3, class T4> void f(typename T1<T2>::T3<T4>)'
7 | void f(typename T1<T2>::T3<T4> val) { }
| ^
<source>:7:6: note: template argument deduction/substitution failed:
<source>:17:6: note: couldn't deduce template parameter 'template<class> class T1'
17 | f( A<int>::B<void>() );
| ~^~~~~~~~~~~~~~~~~~~~~
Убирая T3 полностью и заменяя его на явное B — помогает но это не то что нужно. Но и даже в этом случае приходится указывать все шаблонные параметры для вызова f() ручками, что нежелательно потому как весь смысл этой функции — это вывести все эти T1, .. T4 аргументы шаблона автоматически.
Цель работы — написать навороченный принтер типов, когда мы разваливаем входящий шаблон на запчасти, конвертируем в строку вложенные типы (через constexpr std::source_location::function_name()) и склеиваем всё это по какому-то шаблону, и всё в компайл-тайм.
С++ 20++.
cppmeta R&D compiler
2024-03-25 19:03 flаt
* An Informal introduction to CODE RECKONS CppMeta compiler
* Reflection use cases
Попробовать: https://cppmeta.codereckons.com
cppmeta R&D compiler
2024-03-25 19:03 flаt
* An Informal introduction to CODE RECKONS CppMeta compiler
* Reflection use cases
Попробовать: https://cppmeta.codereckons.com
50 ссылок по С++
2024-03-10 15:27 LaptevVV
Ветераны, наверное, знают большинство из них.
Но иногда попадаются, где я не был.
llvm 18.1.0
2024-03-06 22:24 reversecode
тутачки клангчик за релизили
ну за релизили и черт с ним, скажете вы
между версии они каждые две недели клепают
но есть реализация фишки с с++26
https://releases.llvm.org/18.1.0/tools/clang/docs/ReleaseNotes.html#c-2c-feature-support
вкусно же, не нужно придумывать всякие reserved имена переменнымstruct S {
int _, _; // Was invalid, now OK
};
void func() {
int _, _; // Was invalid, now OK
}
void other() {
int _; // Previously diagnosed under -Wunused, no longer diagnosed
}
есть еще P0847R7: Deducing this для C++23
но мне он как то не зашел, не вижу пока применения
llvm 18.1.0
2024-03-06 22:24 reversecode
тутачки клангчик за релизили
ну за релизили и черт с ним, скажете вы
между версии они каждые две недели клепают
но есть реализация фишки с с++26
https://releases.llvm.org/18.1.0/tools/clang/docs/ReleaseNotes.html#c-2c-feature-support
вкусно же, не нужно придумывать всякие reserved имена переменнымstruct S {
int _, _; // Was invalid, now OK
};
void func() {
int _, _; // Was invalid, now OK
}
void other() {
int _; // Previously diagnosed under -Wunused, no longer diagnosed
}
есть еще P0847R7: Deducing this для C++23
но мне он как то не зашел, не вижу пока применения
Так С++23 уже утвержден или нет ?
2024-03-06 06:33 LaptevVV
И сорока на хвосте принесла, что asio принята в качестве стандартной сетевой библиотеки.
Это в С++23 или в С++26 ?
Так С++23 уже утвержден или нет ?
2024-03-06 06:33 LaptevVV
И сорока на хвосте принесла, что asio принята в качестве стандартной сетевой библиотеки.
Это в С++23 или в С++26 ?
Не могу понять прикола
2024-03-05 14:20 K13
каким-то образом при наличии НЕшаблонного operator|() для конкретного enum
он перестает его видеть если в неймспейсе A добавить шаблонный оператор|() который всегда отключен.
Что-то я торможу. Не понимаю, что происходит при смене #if 1 / #if 0
Не могу понять прикола
2024-03-05 14:20 K13
каким-то образом при наличии НЕшаблонного operator|() для конкретного enum
он перестает его видеть если в неймспейсе A добавить шаблонный оператор|() который всегда отключен.
Что-то я торможу. Не понимаю, что происходит при смене #if 1 / #if 0
концепты как параметры шаблонов
2024-03-04 01:38 rg45
А прикиньте, как было бы классно:
template <typename T, template <typename> concept C>
concept RangeOf = std::ranges::range<T> && C<std::ranges::range_value_t<T>>;
void foo(RangeOf<std::convertible_to<double>> auto&& r) { /* . . . */ }
концепты как параметры шаблонов
2024-03-04 01:38 rg45
А прикиньте, как было бы классно:
template <typename T, template <typename> concept C>
concept RangeOf = std::ranges::range<T> && C<std::ranges::range_value_t<T>>;
void foo(RangeOf<std::convertible_to<double>> auto&& r) { /* . . . */ }
выделить тип из optional который сам template type
2024-02-01 18:20 The Passenger
темплейт может быть как простым типом типа инта или дубля, я может быть optional для простых типов ... но они тоже могут быть разные
1. Как определить что тип optional?
2. Как вычленить тип из optional?
Можно решить это в лоб перегрузкой, но хочеться красиво ... хотя может перегрузкой может получиться красивее
Спасибки
выделить тип из optional который сам template type
2024-02-01 18:20 The Passenger
темплейт может быть как простым типом типа инта или дубля, я может быть optional для простых типов ... но они тоже могут быть разные
1. Как определить что тип optional?
2. Как вычленить тип из optional?
Можно решить это в лоб перегрузкой, но хочеться красиво ... хотя может перегрузкой может получиться красивее
Спасибки
Как взять количество элементов из инициализатора?
2024-01-20 12:38 drVanо
struct token_encoding_t
{
token_type_id types[20];
uint8_t size;
uint8_t bits;
};
Сейчас приходится писать руками, может быть есть способ лучше.
template using для функции
2024-01-05 23:25 Marty
Я вообще отстал от жизни, как привык по старинке использовать typedef, так и использую.
Но новый using хорош тем, что позволяет делать шаблонные алиасы.
И вот мне захотелось сделать алиас шаблонной функции. И что-то не работает. Поверхностное изучение вопроса показало, что шаблонные алиасы работают только для типов, а не для функций. Я что-то не так понял, и это таки возможно, или я всё правильно понял, и это невозможно, но тогда какого хэ?