TGViewer
C++: Хроники Дурки🚑 C++: Хроники Дурки🚑 @cpp_durka · 916 subscribers
Post #4 570
Первым постом в этом канале станет тот, с которого зародилось название канала.

Долгие разборы "военного синуса" привели меня к квинтессенции проблем, после которых я сумел сконструировать несколько абсолютно отвратительных примеров выстрелов себе в ногу.



#include <iostream>

#include <cmath>
double sin(std::string x) { return 1.5; }

int main() {
std::cout << "string: " << std::sin(std::string{"0.5"}) << std::endl;
}



Вот такой код, очевидно, не скомпилируется.


<source>:7:40: error: no matching function for call to 'sin(std::string)'


Что логично. Мы, конечно, объявили синус от строки, но в глобальном пространстве имен. А вызываем std::sin из пространства имен std, и там такого синуса, очевидно, нет.

Но давайте поменяем местами объявление синуса и заголовок cmath. (можем считать, что у нас есть какой-то локальный заголовок, куда такое объявление просочилось)


#include <iostream>

double sin(std::string x) { return 1.5; }
#include <cmath>

int main() {
std::cout << "string: " << std::sin(std::string{"0.5"}) << std::endl;
}



Угадайте что? Правильно: скомпилируется!


Program returned: 0
string: 1.5


А все почему? Правильно, потому что в заголовке cmath (во многих реализациях на linux) есть вот такая строчка:


using ::sin;


Будьте осторожны. Она там такая не одна.
Telegram this->notes. #cpp Ещё есть такой коллега у меня Паша Сухов. Ну как коллега. Он в Доставке вообще работает, но ведь это всё ещё Яндекс. Так что коллега. Пашу вы могли видеть на C++ Russia: - Полезные трюки С++ на примере организации пайплайна - Как заставить шаблоны…
  • 😱 6
  • 🤯 5
  • 🔥 2
  • 👍 1
More from @cpp_durka
  1. Sep 8, 2026Мошенники заставили пенсионерку из Москвы переписать квартиру на Rust
  2. Aug 31, 2026Всяко разное болезненное есть в С++, из всего болезненного одно из самых болезненных - это…
  3. Aug 24, 2026Если кто не знаком с библиотекой nlohmann/json - она прекрасна. Мои мысли о том, как должн…
  4. Aug 21, 2026#толькосвоимемы Код взят тут. if (dim == 0) idx_dim = i0; else if (dim == 1) idx_dim = i1;…
  5. Aug 17, 2026Ладно, искать баги в компиляторах весело, но недостаточно. Давайте поиграемся в чуть более…
  6. Aug 10, 2026Ладно, разумеется прошлый пост был набросом. Никогда не обновляйте компиляторы без очень с…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →