170 похожих чатов

Коллеги, допустимо ли помещать переопределённый operator << (std::ostream &, ...)

для пользовательского класса в пространство имён std?

7 ответов

19 просмотров

щас может ступлю но он вообще будет его искать в другом пространстве имен, а не глобальном или том где лежит класс которому нужен оператор?

Нет, добавление пользовательского кода (кроме специализаций) в std:: — это UB. https://en.cppreference.com/w/cpp/language/extending_std

Хитрый-Лис Автор вопроса
Kelbon
щас может ступлю но он вообще будет его искать в д...

Если не ошибаюсь, благодаря механизму adsl и тому, что первый аргумент будет из пространства std, компилятор в первую очередь будет смотреть туда. Или я таки не прав?

Хитрый Лис
Если не ошибаюсь, благодаря механизму adsl и тому,...

* ADL Он посмотрит везде одновременно, см. associated set https://en.cppreference.com/w/cpp/language/adl

Хитрый-Лис Автор вопроса
Egor Suvorov
* ADL Он посмотрит везде одновременно, см. associ...

Я таки понял, откуда взялся мой вопрос. У меня возникли траблы с тем, чтобы подружить одну конструкцию (из сторонней библиотеки) с библиотекой doctest: #define DOCTEST_CONFIG_IMPLEMENT_WITH_MAIN #include "doctest/doctest.h" namespace ns { struct A { int i; A(int i) : i(i) {} bool operator == (const A & oth) const { return i == oth.i; } }; namespace overloads { std::ostream & operator << (std::ostream & os, const A & a) { return os << a.i; } } } //namespace std { using ns::overloads::operator <<; //} TEST_CASE("linalg_ostream_example") { CHECK_EQ(ns::A(1), ns::A(2)); } Если поместить using ns::overloads::operator << в std, doctest при провале теста даёт информативный вывод, а в глобальном пространстве он операторы не находит. Внутри у doctest довольно много всего, не могу точно сказать, почему так происходит. Можно это как-то правильно решить, не закидывая операторы в std и не меняя код ни одной из библиотек?

Хитрый Лис
Я таки понял, откуда взялся мой вопрос. У меня воз...

operator<< лежит не в глобальном пространстве, а в ns::overloads, и из-за этого конструкция std::cout << ns::A() работать не будет даже при помощи ADL. Что вы имеете в виду под "глобальным пространством"? А так можно StringMaker<T> специализировать: https://github.com/onqtam/doctest/blob/master/doc/markdown/stringification.md

Похожие вопросы

Обсуждают сегодня

Всем привет! Имеется функция: function IsValidChar(ch: UTF8Char): Boolean; var i: Integer; ValidChars: AnsiString; begin ValidChars := 'abcdefghijklmnopqrstuvwxyzABCDE...
Евгений
44
Ну вот просто даже давайте вот как. Какой нибудь конкретный кейс, можете в пример привести, где бч работает и приносит прикладную пользу, а не просто что бы было? Не крипту.
Alexander Andreev
22
объясните пожалуйста, почему функция не работает должным образом? вроде должно брать активное окно сравнивать его размер с размером экрана, и если есть совпадение = true прове...
JF
12
лучше скажите, причём тут паскаль?
Alexey Kulakov
36
> Копаем глубже > Следующий момент был, когда я спросил его, знает ли он JavaScript. Он ответил, что его учили работать с C#. Я тоже в университете писал на C#, но даже там мн...
Oleg Volkov
4
Гляньте, че бывает: Сегодня по одному проекту одной вебстудии делал проект небольшой, на их хостинге. На Modx revo. В определенный момент , работая в админке, вдруг перестал р...
Artem
7
И никого не интересует какие пакеты кто использует. ((% Заходишь на сайт симфони и видишь поддержку Украины - по законам РФ это ж экстремизм. Только никто не отказывается от с...
Am Ambrion
11
Чтобы перехватить все нажимания буков на форме, надо хук ставить? Пробовал на форме ОнКейДаун, оно ловит клаву если фокус не на компоненте с вводом текста
Serjone
15
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
12
Народ! Впервые клиенту пришло письмо от РКН, у вас, дескать, есть яндекс метрика, а нигде не написано, что вы ее юзаете. Никто не сталкивался?
Sasha Beep
14
Карта сайта