Custom deduction guide для std::классов

Рейтинг: 1Ответов: 1Опубликовано: 10.01.2023

Изучаю вопрос о custom deduction guides. Вижу примеры, в которых его применяют для своих классов:

template <typename T>
struct S {
T data;

  S(T x) : data(x) {}
};


S(const char*) -> S<std::string>;

S s("abc"); //decltype(s.data) - std::string

Когда пробую провернуть такое для библиотечных типов, не выходит:

std::vector(const char*) -> std::vector<std::string>

Компилятор говорит:

‘std::vector(const char*)-> std::vector >’ should have been declared inside ‘std’

Можно ли это обойти какими-нибудь шаблонными трюками?

Ответы

▲ 1Принят

Например, такое читерство — формально запрещенное (добавлять что-то к пространству имен std запрещено (или категорически не рекомендуется, точно не помню...)):

namespace std {
    vector(const char*) -> vector<string>;
}