Можете ли вы использовать вывод аргумента шаблона класса, когда класс является параметром шаблона другого шаблона? - PullRequest
0 голосов
/ 15 мая 2018

Я пытался написать код, подобный этому:

#include <string>
#include <vector>
#include <utility>

using namespace std::string_literals;
int main(){
    std::vector v{1,2,3};
    std::pair p{1,"a"s};
    //std::vector<std::pair> vp{{1,"a"s}, {2, "b"s},{3,"c"s}};  // ERROR
}

Но это дает ошибку компиляции в строке, где пара является параметром шаблона вектора.

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

1 Ответ

0 голосов
/ 15 мая 2018

В данный момент это не поддерживается.От [dcl.type.class.deduct] p2 :

Заполнитель для выведенного типа класса также может [в объявлениях переменных, таких как type] использоваться в type-specier-seq в new-type-id или type-id для new-expression , или как спецификатор простого типа в явном преобразовании типов (функциональная запись). Заполнитель для выведенного типа класса не должен появляться ни в каком другом контексте.

Как видно из предложения, которое я выделил, поскольку ваше использование не соответствует ни одному из местКак уже упоминалось выше, ваш код неверно сформирован.

Вы можете сделать что-то вроде этого:

std::vector vp{std::pair{1, "a"s}, {2, "b"s}, {3, "c"s}};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...