Описание тега ctad
Выведение аргументов шаблона класса, представленное в C++17, позволяет вывести отсутствующие аргументы шаблона для создания экземпляра шаблона класса на основе инициализатора.
1
ответ
Как определить руководство по выводу с помощью шаблонного конструктора?
Чтобы упростить мою проблему, я буду использовать std::unique_lock как инструмент для объяснения. У std::unique_lock есть аргумент шаблона, мьютекс. Тем не менее, его конструктор также является функцией шаблона unique_lock(TMutex &, const chrono…
04 авг '19 в 23:17
0
ответов
Должен ли вывод аргументов шаблона класса (CTAD) работать внутри модулей?
Учитывая следующий модуль // mod.cpp export module mod; export template<typename T> struct something { constexpr something(T){} }; export template<typename T> constexpr auto make_something(T t) { return something{t}; // uses CTAD } Скомп…
24 мар '20 в 12:12
1
ответ
CTAD и назначенные инициализаторы в C++20
В этом вопросе я уже говорил о путанице по поводу CTAD с назначенными инициализаторами, но у меня есть еще одна путаница с очень похожим фрагментом кода template <typename int_t=int, typename float_t=float> struct my_pair { int_t first; float_…
11 сен '19 в 12:58
0
ответов
Проблема рекурсии CTAD для оболочек функций с указателем обертки в качестве аргумента функции
У меня есть шаблонная оболочка функции с типом шаблона, равным типу возврата функции. Кроме того, первым аргументом функции является указатель на саму оболочку. template<typename R> struct wrapper_t{ using result_t = R; template<typename F,…
18 ноя '19 в 04:52
3
ответа
Ошибка вывода аргумента шаблона при использовании списка инициализаторов в фигурных скобках
Я пытаюсь использовать вывод аргументов шаблона в функции perpendicular(): #include <iostream> template <typename component = double> struct offset { component x; component y; }; template <typename component> offset(component x, co…
26 сен '19 в 17:32
2
ответа
Вывод шаблона размера массива
У меня есть класс, в котором хранится std::array. Размер массива оценивается во время компиляции, это связано с тем, что приложение работает на встроенном устройстве, поэтому нет динамических распределений:(. Код выглядит примерно так: template<u…
29 июл '20 в 16:41
1
ответ
Вывод аргументов из шаблона класса - clang и gcc отличаются
Следующий код компилируется с помощью gcc, но не с clang: template<typename T> class number { T num; public: number(T num = 0): num(num) {} template<typename T1, typename T2> friend auto add(T1 a, T2 b); }; template<typename T1, typen…
07 июл '20 в 18:55
2
ответа
Вывод типа для вариативных шаблонов
Проблема: Я хочу иметь руководство по дедукции для класса, который принимает переменное количество объектов, созданных с помощью вариативного шаблона. Например template<typename... Ts> struct y { using values_t = std::tuple<Ts...>; value…
02 авг '20 в 12:01
2
ответа
Почему мы не можем объявить руководство по дедукции вне встроенного пространства имен?
Пример: namespace X{ inline namespace Y{ template<typename T> struct A{ }; } } namespace X{ template<typename Z> A(std::vector<Z>) -> A<Z>; } Это вызывает ошибку компиляции в Clang 11, в которой говорится: "Руководство по …
13 авг '20 в 14:07
0
ответов
CTAD и конструктор шаблона с членом с пакетом параметров
Пытаясь использовать универсальные ссылки с CTAD и пакетом параметров, я пробовал что-то вроде ниже, но оно не компилируется на MinGW GCC. И я не понимаю почему. Это пример кода: #include <utility> template<typename... Ts> struct Subtest…
19 авг '20 в 22:05
1
ответ
Ошибка замены std::invoke для указателя функции-члена
Я работаю с webview (находится здесь: https://github.com/webview/webview), чтобы создать программу на C++ с html/js gui. Чтобы вызывать функции C++ из js, они должны быть в формеstd::string function(std::string). Это довольно тривиально для бесплатн…
28 авг '20 в 15:37
2
ответа
Как использовать CTAD для лямбды?
Добрый день всем. Я реализовал пару классов: // CallingDelegate template <typename Result, typename ... Args> class CallingDelegate { using TypeDelegate = std::function<Result(Args...)>; public: CallingDelegate() = delete; CallingDelegat…
31 авг '20 в 18:04
2
ответа
В чем смысл std::make_optional
Все std::make_делаются избыточными в C++17 с введением вывода аргументов шаблона класса (кромеmake_unique а также make_shared). Так в чем смысл std::make_optional ? Насколько я могу судить, он делает то же самое, что и руководство по дедукции дляstd…
05 июл '20 в 01:01
2
ответа
Выведение аргумента шаблона класса для параметра, зависящего от шаблона
Начнем с простого метода добавления для класса number: class number { int num; public: number(int num = 0): num(num) {} operator int() const { return num; } }; number add(number t1, number t2) { return t1 + t2; } int main() { auto result1 = add(1, 2…
07 июл '20 в 19:34
1
ответ
Есть ли способ иметь псевдоним шаблона и сохранить вывод аргументов шаблона класса?
#include <vector> template<class T> using vec = std::vector<T>; int main() { std::vector a{2,3}; // vec b{2,3}; // not going to work } Мы все еще вынуждены использовать макросы? В их использовании так много недостатков...
14 ноя '19 в 23:01
1
ответ
Определяемое пользователем руководство по дедукции для стандартных типов
По какой-то причине все еще отсутствует ожидаемый CTAD дляstd::initializer_listв лязг: std::initializer_list l{1,2,3}; // error in clang Добавление определяемого пользователем руководства, подобного следующему, может решить проблему: namespace std {…
15 авг '20 в 12:31
0
ответов
Почему CTAD не удалось выполнить std :: unique_ptr (new int ()) в C++ 17?
Почему не удалось вывести аргумент шаблона класса C++17 std::unique_ptr(new int()); Что компилятор мог вообразить, а не std::unique_ptr<int>?
31 май '20 в 00:13
1
ответ
CTAD не может вывести аргумент шаблона с помощью SFINAE в частичной специализации
Я пробовал использовать CTAD с SFINAE в частичных специализациях, но он не компилируется, пока я не добавлю, казалось бы, бесполезное руководство по дедукции. В чем причина / ограничение? template<typename T, typename Enable = void> struct A; …
03 окт '20 в 16:20
1
ответ
Правильно ли Clang или GCC отклоняют / принимают этот код CTAD?
Clang и GCC не согласны принять этот код. Какое стандартное требуемое поведение? #include <utility> #include <iostream> #include <vector> int main() { std::vector pairs = {std::pair{1,11},{2,22}, {3,33}}; for (const auto& p: pa…
09 фев '21 в 21:19
1
ответ
Руководство пользователя по выводу для вложенных типов-шаблонов
Q1 : Допускаются ли определяемые пользователем руководства по дедукции в области пространства имен? В приведенном здесь примере GCC и Clang не ведут себя одинаково: https://godbolt.org/z/8W6hznEjo Короче говоря, у нас есть тип, параметризованный шаб…
23 мар '21 в 17:51