Mehrdeutiger Aufruf einer Funktion in verschiedenen Namespaces
-
Was macht man bei folgendem Problem:
//#include <irrlicht.h> namespace irr { s32 isdigit(s32); //Irrlicht definiert diese Funktion } using namespace irr; //um using irr::s32, using irr::u32, using irr::core::array, ... zu vermeiden namespace std { bool isdigit(char); //in der Standardbibliothek gibts die auch } //in boost::spirit passiert das: using namespace std; isdigit(..); //Mehrdeutiger Aufruf einer überladenen Funktion
Man könnte natürlich Spirit ändern, aber das ist eher eine Notlösung. Gibts da eine andere Möglichkeit?
-
Verstehe das Problem noch nicht.
TyRoXx schrieb:
[/cpp]
//in boost::spirit passiert das:
using namespace std;
isdigit(..); //Mehrdeutiger Aufruf einer überladenen Funktion
[/cpp]In einem Header? Das darf nicht sein. Dann muß hier boost repariert werden.
Nicht im Header? Dann gibts auch kein Problem, weil kein Mensch using namespace in einen Header geschrieben hat.
-
Ich finde die Datei gerade nicht wieder, aber das sieht sinngemäß so aus:
bool isdigit_(char c) { using namespace std; return isdigit(c); }
-
und du hast in nem header
using namespace irr;
geschrieben?oder hat boost oder irrlicht in nem header using namespace geschrieben?
falls weder du den fehler gemacht hast noch in einem der beiden libs so nen doofer bug ist, versteh ich dein problem genau so wenig wie volkard ;P
-
TyRoXx schrieb:
Ich finde die Datei gerade nicht wieder, aber das sieht sinngemäß so aus:
bool isdigit_(char c) { using namespace std; return isdigit(c); }
Ja, ist google leicht zu finden, z.B. http://springhead.info/src/boost/spirit/core/primitives/impl/primitives.ipp
Entweder haben die booster hier zu viele Drogen genommen, oder sie wollten automatisch alte Compiler unterstützen, die ::isdigit statt std::isdigit anbieten. Ich tippe mal auf letzteres.
Aber trotzdem sollte kein Fehler deswegen kommen, oder? Nee.