Je suis aux prises avec ce qui semble être une ambiguïté dans c++11 symbole de résolution due à la licence GNU de la bibliothèque standard de mise en œuvre dans cet environnement:
- Arch Linux 4.2.5-1 (x86_64)
- g++ 5.2.0
- clang++ 3.7.0
Exemple:
#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;
}
Erreur de compilateur:
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
Commande:
clang++ -std=c++11 -o test *.cpp
L'opérateur de résolution de portée ne semble pas être applicable dans les etats membres de l'initialisation des listes donc je ne peux pas comprendre comment résoudre l'ambiguïté. Cet exemple compile très bien sans le c++11 drapeau.