Квалифицировать вызов неоднозначного UDLC++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 Квалифицировать вызов неоднозначного UDL

Сообщение Anonymous »

У меня есть два пространства имен, которые определяют одни и те же пользовательские литералы: < /p>

Код: Выделить всё

namespace foo {
struct x{ unsigned long long i; };
namespace literals {
constexpr foo::x operator""_x(unsigned long long i) { return { i }; }
}
}

namespace bar {
struct x{ unsigned long long i; };
namespace literals {
constexpr bar::x operator""_x(unsigned long long i) { return { i }; }
}
}
< /code>
Есть ли какой -то способ использовать оба в одном и том же прицеле без двусмысленности? Для всех других функций я могу просто использовать полностью квалифицированные имена: < /p>
std::vector v = {
{ foo::x{ 3 }, bar::x{ 14 } },
};
Но я не могу сделать то же самое для UDL (если я не называю их как обычные функции foo :: literal :: operator "" _ x (3) , которые побеждают их цель как сокращение):

Код: Выделить всё

namespace f = foo::literals;
namespace b = bar::literals;

std::vector v = {
{ 3f::_x, 14b::_x },
};
В этом случае решение, с которым я бы пошел, состоит в том, чтобы построить v через Helper или iife [] (const std :: vector &) -> std :: vector , но мне было интересно, что я не могу не быть на пути к тому>

Подробнее здесь: https://stackoverflow.com/questions/795 ... iguous-udl
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»