Я борюсь с тем, что кажется двусмысленностью в разрешении символа С++ 11 из-за реализации стандартной библиотеки GNU в этой среде:
- Arch Linux 4.2.5-1 (x86_64)
- g++ 5.2.0
- clang++ 3.7.0
Пример:
#include <iostream>
#include <string>
struct version {
unsigned major;
unsigned minor;
unsigned patch;
version(unsigned major, unsigned minor, unsigned patch) :
major(major), minor(minor), patch(patch) { }
friend std::ostream & operator<<(std::ostream & out, version const& v) {
out << v.major << ".";
out << v.minor << ".";
out << v.patch;
return out;
}
};
int main(int argc, char ** argv) {
version v(1, 1, 0);
std::cout << v << std::endl;
return 0;
}
Ошибка компилятора:
error: member initializer 'gnu_dev_major' does not name a non-static data
member or base class
error: member initializer 'gnu_dev_minor' does not name a non-static data
member or base class
Команда:
clang++ -std=c++11 -o test *.cpp
Оператор разрешения области видимости не применим в списках инициализации членов, поэтому я не могу понять, как устранить эту неоднозначность. Этот образец компилируется без флага С++ 11.