Описание тега template-instantiation
1
ответ
Вызывает ли typedef и использование шаблона создание экземпляра?
Скажем, у меня есть шаблонный класс, определенный следующим образом template <typename T> class Temp{ // irrelevant }; Я могу или неявно или явно создать его экземпляр: Temp<int> ti; template class Temp<char>; С явным созданием экз…
05 окт '17 в 03:12
1
ответ
Почему эта функция-член дублируется?
У меня есть код, который работает на VS10 и работает на нескольких других платформах, но вызывает странную ошибку на VS2015. Ошибка (в расширении шаблона внутри Boost) очень странная, потому что она указывает на форму без const и говорит мне, что он…
24 дек '15 в 09:43
0
ответов
C++: распараллелить создание шаблона
У нас большой класс с несколькими параметрами шаблона. Чтобы сократить время компиляции, мы уже используем явную реализацию. Хотя это сокращает время компиляции всех, кто включает заголовок, компиляция файла cpp все еще очень медленная. Есть ли спос…
16 фев '18 в 15:38
1
ответ
В какой момент происходит создание шаблона привязки?
Этот код взят из "языка программирования C++" Бьярна Страуструпа (C.13.8.3 Binding of Instantiation Binding) template <class T> void f(T value) { g(value); } void g(int v); void h() { extern g(double); f(2); } И он упоминает: Здесь точка созда…
10 окт '16 в 13:09
2
ответа
Ссылка на конкретную специализацию шаблона из неинстанцированного контекста: инстанцирование или нет?
Рассмотрим следующий пример template <typename A> struct S { A a; void foo() {} }; template <typename T> void bar() { S<void> *p = 0; } template <typename T> void baz() { S<void>{}.foo(); } template <typename T> v…
08 дек '18 в 19:20
4
ответа
Возможно ли, что скомпилированная программа не содержит экземпляра класса шаблона?
Рассмотрим этот код: template <typename T> class A { T x; // A bunch of functions }; std::size_t s = sizeof(A<double>); Предположим, sizeof Оператор является единственным местом, где создание экземпляров A<double> необходимо. Возмо…
30 дек '17 в 10:10
1
ответ
Тип параметра шаблона рассматривается компилятором как завершенный, но его определение пока не видно
Предположим, у меня есть следующий фрагмент кода: template <class T> class Bar { // static_assert(sizeof(T) > 0); // (1) public: void method() { static_assert(sizeof(T) > 0); // (2) } }; class Foo; // (3) template class Bar<Foo>; /…
01 янв '19 в 17:50
1
ответ
История происхождения [temp.spec]/6?
[temp.spec]/6 читает: Обычные правила проверки доступа не применяются к именам в объявлении явной реализации или явной специализации, за исключением имен, появляющихся в теле функции, аргумент по умолчанию, базовое предложение, спецификация члена, с…
14 янв '19 в 02:17
1
ответ
"If constexpr" полезен вне шаблонов?
Я пытаюсь понять if constexpr от корки до корки. Я понимаю, что если if constexpr(expr) используется в шаблоне, и expr зависит от параметра шаблона, то во время реализации только один из then/else ветви будут созданы, остальные будут отброшены. У ме…
02 дек '18 в 23:28
2
ответа
Стандартные требования C++ к шаблонам, которые не были созданы
Поэтому я попытался скомпилировать приведенный ниже код, и это не удалось (как и ожидалось): 1.cpp: In function ‘int foo()’: 1.cpp:3:5: error: ‘some’ was not declared in this scope some ill-formed code ^ Но если я уберу эту строку, компилятор скомпи…
26 ноя '18 в 02:09
2
ответа
Является ли виртуальная функция класса шаблона неявно созданной?
Рассмотрим следующий код. Гарантируется ли это, что Derived<int>::foo() будет создан экземпляр? foo() является виртуальным и вызывается не виртуальной функцией базового класса. #include <iostream> class Base { public: void bar() { foo();…
15 дек '16 в 22:12
1
ответ
Является ли специализация неявно созданной, если она уже была неявно создана?
Вопрос в названии достаточно понятен. Чтобы быть более конкретным, рассмотрим следующий пример: #include <type_traits> template <typename T> struct is_complete_helper { template <typename U> static auto test(U*) -> std::integral…
06 сен '18 в 09:39
1
ответ
Опционально проверено литье на возможно неполный тип
В соответствии с простой, навязчиво подсчитанной системой объектов, у меня есть template<typename T> class Handle, который предназначен для создания экземпляра с подклассом CountedBase, Handle<T> содержит указатель на T и его деструктор …
05 авг '15 в 11:44
1
ответ
Общая библиотека: неопределенная ссылка с частичной специализацией шаблона и явным созданием шаблона
Скажем, есть сторонняя библиотека, которая имеет следующее в заголовочном файле: foo.h: namespace tpl { template <class T, class Enable = void> struct foo { static void bar(T const&) { // Default implementation... }; }; } В интерфейсе моей…
20 фев '17 в 10:33
3
ответа
Генерация кода, создающего экземпляр шаблона функции с разными аргументами
Учитывая следующий код: #include <iostream> template <int X, int Y> int foo(int v) // dummy parameter { return v * X + v / Y; // dummy calculation } int main() { // x, y, v are only known at runtime int x = 4; int y = 6; int v = 3; int r…
25 ноя '17 в 08:10
3
ответа
Функция шаблона для полной специализации
У меня есть шаблон функции, объявленный в заголовочном файле. Эта функция является архиватором, который должен поддерживать несколько других типов (классов), реализованных в рамках проекта. Идея состоит в том, чтобы иметь базовое объявление шаблона,…
21 окт '15 в 18:10
2
ответа
Ошибка в создании шаблона перед перегрузкой
Учитывая следующий код #include <type_traits> #include <utility> template <typename T> class Something { public: template <typename F> auto foo(F&&) -> decltype(std::declval<F>()(std::declval<T&>())…
11 окт '17 в 14:05
2
ответа
Сбой вывода типа для auto stdMaxInt = std:: max<int>;
Использование GCC 4.8.4 с g++ --std=c++11 main.cpp выводит следующую ошибку error: unable to deduce ‘auto’ from ‘max<int>’ auto stdMaxInt = std::max<int>; для этого кода #include <algorithm> template<class T> const T& myM…
14 ноя '15 в 07:15
1
ответ
Clang не может создать конструктор перемещения по умолчанию при создании шаблона
Следующий код (я не мог сделать более короткий MVCE) unit.h: #include <vector> template<typename T> struct foo { std::vector<T> data; foo(foo&&) = default; // no assembly generated foo(std::vector<T>&&v) : dat…
13 ноя '18 в 14:17
1
ответ
Декларация не решает ошибку "явная специализация после создания"
Предположим, я пытаюсь создать свою собственную реализацию boost::filesystem::path, используя шаблон Curly Recurring Template: (Для краткости приведен код, но он будет содержать проблему, указанную при компиляции сg++ -std=c++11 -o mypath ./mypath.c…
27 ноя '16 в 07:14