/ bin / bash: строка 1: 25509 убито

Это называется «имя введенного класса». Правило конкретно исходит от [temp.local]:

Как и обычные (не шаблонные) классы, у шаблонов классов есть имя-инъекции-класс (раздел 9) , Имя injected-class-name может использоваться как имя шаблона или имя . Когда он используется с template-argument-list , в качестве шаблона-аргумента для шаблона template-parameter или в качестве конечного идентификатора в спецификаторе специфицированного типа объявления шаблона класса друга, он относится к самому шаблону класса. В противном случае это эквивалентно имя-шаблона , за которым следуют шаблонные параметры шаблона класса, заключенного в <>.

В рамках специализации шаблона класса или частичного специализация, когда имя injected-class-name используется как имя типа , оно эквивалентно имени шаблона , за которым следует template-arguments специализации шаблона класса или частичной специализации, заключенной в & lt;>. [Пример:

template<template<class> class T> class A { };
template<class T> class Y;
template<> class Y<int> {
    Y* p;                                // meaning Y<int>
    Y<char>* q;                          // meaning Y<char>
    A<Y>* a;                             // meaning A<::Y>
    class B {
        template<class> friend class Y;  // meaning ::Y
    };
};

-end example]

Это в основном для удобства, так что имя класса внутри класса относится к самому классу, а не к внешнему, которое может иметь одно и то же имя. Для шаблонов классов это потенциально экономит много ввода, если у вас длинный список аргументов шаблона.

0
задан R type 16 January 2019 в 08:08
поделиться