Следующий код компилируется нормально:
#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
?)