Функция обратного вызова кода не компилируется ни в g ++, ни в clang ++ в Ubuntu 18, но таинственным образом работает в mac osx - PullRequest
0 голосов
/ 01 марта 2019

В Mac OSX, clang версии 7.0.2, код компилируется.На Ubuntu Clang версии 7.0.0 это не так.Есть ли какая-то разница в какой-то библиотеке по умолчанию, это кажется странным?

MWE:

#include <string>
using namespace std;
int main() {
    string A = "abc";
    reverse(A.begin(), A.end());
}

Действительно ли кто-то вводит алгоритм как-то, но отличается ли он между двумя версиями?

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Стандартной библиотекой по умолчанию в Mac OS является libc ++.Стандартной библиотекой по умолчанию в Ubuntu является libstdc ++.

. Вы можете попробовать Ubuntu, передав компилятору -stdlib=libc++ и посмотреть, что произойдет.

Разница в том (подозреваю, но неточно знаю) что в libc ++ string::iterator есть тип в пространстве имен std, поэтому поиск ADL происходит, но в libstdc ++ итераторы просто char *, и поскольку они не живут в пространстве имен std, поиск в этом пространстве имен не происходит.

0 голосов
/ 01 марта 2019

Да, библиотеки по умолчанию различаются в разных системах с разными компиляторами.Если вы используете определенную функцию, включите соответствующий заголовок.На вашем Mac обратная функция, кажется, включена где-то глубоко в заголовок строки.Используйте #include <algorithm>, и оно должно работать и в других системах.

...