Вывод аргумента шаблона класса из переменных-членов - PullRequest
0 голосов
/ 05 декабря 2018

В C ++ 17 мне разрешено использовать Foo в следующем примере без пустых скобок аргументов шаблона благодаря выводу аргумента шаблона класса:

template<typename T = int>
struct Foo{};

int main(){
    Foo f;    // before C++17 you had to write "Foo<> f;"
}

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

template<typename T = int>
struct Foo{};

struct Foo2{
    Foo f{};  ///< error: invalid use of template-name 'Foo' without an argument list
};

int main(){
    Foo2 f2;
}

1 Ответ

0 голосов
/ 05 декабря 2018
  1. Никто, IIRC, не предлагал его.
  2. Предположительно по той же причине, по которой мы ничего не выводим из инициализаторов элементов по умолчанию: они не всегда используются - конструктор может переопределить их, явно указавдругой инициализатор.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...