Является ли std :: vector <T> `пользовательским типом`?

В 17.6.4.2.1 / 1 и 17.6.4.2.1 / 2текущий проект стандарта ограничения наложены на специализации, введенные пользователями вnamespace std.

Поведение программы на C ++ не определено, если она добавляет объявления или определения в пространство имен std или в пространство имен в пространстве имен std, если не указано иное. Программа может добавить специализацию шаблона для любого стандартного шаблона библиотеки в пространство имен std, только если объявление зависит отпользовательский тип и специализация соответствует стандартным требованиям библиотеки для оригинального шаблона и явно не запрещена.

Не могу найти где в стандарте фразупользовательский тип определено.

Один из вариантов, о которых я слышал, это то, чтоstd::is_fundamental&nbsp;этопользовательский тип, в таком случаеstd::vector<int>&nbsp;будетпользовательский тип.

Альтернативный ответ был бы, чтопользовательский тип&nbsp;это тип, который определяет пользователь. Как пользователи не определяютstd::vector<int>, а такжеstd::vector<int>&nbsp;не зависит от типа, определенного пользователем,std::vector<int>&nbsp;это непользовательский тип.

Практическая проблема, на которую это влияет: «Можете ли вы ввести специализацию дляstd::hash&nbsp;заstd::tuple<Ts...>&nbsp;вnamespace std? Быть способным сделать это несколько удобно - альтернатива состоит в создании другого пространства имен, в котором мы рекурсивно создаем наш хеш дляstd::tuple&nbsp;(и, возможно, другие типы вstd&nbsp;которые не имеютhash&nbsp;поддержки), и если и только если нам не удастся найти хеш в этом пространстве имен, мы будем использоватьstd.

Однако, если это законно, то если и когда стандарт добавляетhash&nbsp;специализация дляstd::tuple&nbsp;вnamespace stdкод, специализирующий его, уже был бы нарушен, создавая причину не добавлять такие специализации в будущем.

Пока я говорю оstd::vector<int>&nbsp;В качестве конкретного примера я пытаюсь спросить, определены ли типы вstd&nbsp;когда-либопользовательский тип&nbsp;s. Вторичный вопрос, даже если нет, может бытьstd::tuple<int>&nbsp;становитсяпользовательский тип&nbsp;когда используется пользователем (это становится скользким: что тогда происходит, если что-то внутриstd&nbsp;определяетstd::tuple<int>, а ты частично специализируешьсяhash&nbsp;заstd::tuple<Ts...>).

Там в настоящее времяоткрытый дефект&nbsp;по этой проблеме.