Описание тега template-aliases

1 ответ

Странное поведение is_same_template для псевдонимов шаблона

Следующая программа... #include <iostream> #include <type_traits> template <typename T> struct Template{}; template <typename T> using Alias = Template<T>; template < template <typename> class T1, template <…
06 апр '14 в 09:14
3 ответа

Как псевдонимы шаблона влияют на вывод параметров шаблона?

В C++03 вывод параметров шаблона не происходит в некоторых контекстах. Например: template <typename T> struct B {}; template <typename T> struct A { typedef B<T> type; }; template <typename T> void f(typename A<T>::type…
08 янв '12 в 03:39
1 ответ

Что является формальным в C++ const reference (не ссылка на const, а ссылка на const)

Дано template< class Type > void constref( Type const ) {} void constref_call() { double x; constref<double&>( x ); } // OK template< class Type > using reference = Type&; void foo( reference< const int > const x ) { …
1 ответ

Частичная привязка шаблона, создание нового шаблона как типа

Есть ли способ частично связать шаблон с типами параметров? Например, у меня есть следующий шаблон: template<typename T, typename Q> struct generic { }; И у меня есть другой шаблон, который принимает класс шаблона в качестве параметра, ожидая,…
05 авг '13 в 12:05
1 ответ

Введите псевдоним / использование объявления для итератора в C++11

У меня проблемы с получением объявления об использовании, которое, как я считаю, должно работать: #include <iostream> #include <vector> using namespace std; template<typename C, typename V> vector<typename C::iterator> find_a…
20 янв '14 в 18:55
1 ответ

Шаблон псевдонима, частичная специализация и недопустимый тип параметра void

Рассмотрим следующий код: template<typename F> struct S; template<typename Ret, typename... Args> struct S<Ret(Args...)> { }; template<typename... Args> using Alias = S<void(Args...)>; int main() { S<void(int)> s;…
08 мар '16 в 22:43
1 ответ

Как эмулировать направляющие вычеты для псевдонимов шаблонов?

Учтите следующее: template <typename T, std::size_t N> struct my_array { T values[N]; }; Мы можем предоставить вычеты для my_array, что-то вроде template <typename ... Ts> my_array (Ts ...) -> my_array<std::common_type_t<Ts...&g…
2 ответа

Псевдоним шаблона C++11 в качестве аргумента шаблона шаблона приводит к другому типу?

Мы наблюдали странное поведение при компиляции следующего исходного кода: template<template<class> class TT> struct X { }; template<class> struct Y { }; template<class T> using Z = Y<T>; int main() { X<Y> y; X<…
1 ответ

Псевдонимы шаблона не работают

Я пытаюсь заставить псевдонимы шаблона работать на Clang, но это не работает, хотя справочный лист говорит, что это делает ~~~~>$ cat template_alias.cpp #include <vector> using namespace std; template<typename T> using DoubleVec = vec…
09 окт '11 в 15:02
0 ответов

Псевдоним шаблона как зависимое имя

Как вызвать функцию шаблона на основе зависимого псевдонима шаблона другой функции шаблона? Например, есть класс шаблона и функция шаблона, которая принимает этот класс в качестве аргумента шаблона: template<typename... T> struct FooClass { st…
03 авг '15 в 16:54
2 ответа

Псевдоним шаблона

Согласно http://en.cppreference.com/w/cpp/language/type_alias, псевдонимы являются объявлениями на уровне блоков. В псевдонимах шаблонов ничего особенного не говорится, поэтому следует помнить, что псевдонимы шаблонов также являются объявлениями на …
24 сен '15 в 18:03
1 ответ

Почему я не могу объявить шаблонные псевдонимы типов внутри функций?

Почему я не могу объявить шаблонный псевдоним типа внутри функции? #include <vector> int main(){ //type alias deceleration: template <typename T> using type = std::vector<T>; //type instantiation: type<int> t; } ошибка: объяв…
22 дек '15 в 15:50
1 ответ

Шаблоны псевдонимов C++11 в CUDA

Основной вопрос в том, поддерживаются ли шаблоны псевдонимов компилятором CUDA? Я использую CUDA 7.5 на Ubuntu с gcc-4.8. Все мои классы шаблонов определены в заголовочных файлах и #includeг в одну единицу перевода во время компиляции. У меня просто…
08 окт '15 в 08:21
1 ответ

Вариативные псевдонимы шаблона в качестве аргументов шаблона

Сначала некоторый код, затем некоторый контекст, затем вопрос: template <typename T> using id = T; template <template <typename...> class F, typename... T> using apply1 = F <T...>; template <template <typename...> cl…
3 ответа

Ошибка g++ с частичной специализацией шаблонов

Я пишу некоторый TMP-тяжелый код для g++ (версия 4.8.1_1, Macports) и clang++ (версия 3.3, Macports). В то время как g ++ отклоняет следующий листинг кода с UNBRIDLED FURY, clang ++ компилирует его с изяществом и великолепием. Какой компилятор в пра…
1 ответ

Можно ли использовать мета-функцию type to value в качестве псевдонима переменной в C++14?

Рассматривая предложения псевдонимов мета-функций в C++14 ( TransformationTraits Redux, v2, N3655), я заметил, что не только преобразования типа в тип (например, add_const), введите значение мета-функции (например, is_void) также являются псевдонима…
2 ответа

Могу ли я использовать псевдонимы шаблона в качестве параметров шаблона?

Могу ли я использовать псевдонимы шаблона в качестве параметров шаблона? template <template <typename...> class> struct foo {}; template <typename T> using simple_ptr = std::unique_ptr<T>; foo<std::unique_ptr> a; // thi…
06 сен '11 в 12:00
1 ответ

Псевдоним шаблона со значением по умолчанию

Информация Я пытаюсь использовать псевдоним шаблона, чтобы улучшить читабельность моего кода. В идеале я хотел бы, чтобы у псевдонима был аргумент по умолчанию, так что если я опускаю шаблон, он использует значение по умолчанию (именно с шаблонными …
02 июл '13 в 10:19
2 ответа

Можно ли пометить шаблон псевдонима как друга?

Представьте, что у нас есть этот код: template <class, class> class Element {}; template <class T> class Util { public: template <class U> using BeFriend = Element<T, U>; }; Можно ли отметить BeFriend как друг? (Из Utilили лю…
06 ноя '15 в 09:26
1 ответ

Видимость псевдонима шаблона во вложенном классе

Учтите следующее: template<typename X> struct Z {}; struct A { using Z = ::Z<int>; struct B : Z { using C = Z; }; }; Это хорошо компилируется. Ницца. Но теперь добавьте еще один параметр в Z: template<typename X, typename Y> struct…