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

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

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

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

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

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

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

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

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

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

Ответы на вопрос(4)

Ваш ответ на вопрос