Ошибка компоновщика с инициализацией пустых скобок - PullRequest
0 голосов
/ 13 января 2020

Следующий код компилируется нормально:

#include <iostream>
#include <map>
#include <string>

struct Config {
    std::map<std::string, std::string> info;
};

void f(const Config& = Config()) { }

int main() {
    f();
}

однако, похоже, что в некоторых компиляторах возникает ошибка компоновщика:

#include <iostream>
#include <map>
#include <string>

struct Config {
    std::map<std::string, std::string> info;
};

void f(const Config& = {}) { }

int main() {
    f();
}

В G CC в CentOS 7 ( c++ (GCC) 7.3.1 20180303 (Red Hat 7.3.1-5)), выдает следующую ошибку компоновщика:

/tmp/ccM1NXXc.o: In function `main':
test.cc:(.text+0x42): undefined reference to `std::map<std::string, std::string, std::less<std::string>, std::allocator<std::pair<std::string const, std::string> > >::map()'
collect2: error: ld returned 1 exit status

На других платформах / версиях компилятора, похоже, работает нормально. Это ошибка компилятора, и должны ли два кода работать одинаково? (Должна ли = {} инициализация Config привести к созданию по умолчанию std::map?)

...