Während ich nach Hinweisen auf ein Kompilierungsproblem suchte, das ich in meiner Quelle hatte, bin ich auf bug report (against Mozilla's JavaScript engine source) im Zusammenhang mit Funktionen nachschlagen gekommen. Zitiert aus dem Bug-Report:static function lookup von einem Template-Funktionsproblem mit xlC
TypedArrayTemplate ist (natürlich) eine Vorlage, und es verweist INT_TO_JSVAL, eine statische Inline-Funktion, ohne sie mit prefixing "::". Dies unterbricht xlC, weil es INT_TO_JSVAL nicht auflösen kann. Der Standard fordert nicht, dass Statiken berücksichtigt werden, wenn der nicht qualifizierte Name nicht im Kontext der Vorlagenargumente gefunden wird. g ++ tut dies Fallback, xlC nicht.
Informative Nachricht vom Compiler:
(I) Static declarations are not considered for a function call if the function is not qualified.
In meinem Fall der Code, der dazu war ähnlich versagte:
namespace N
{
static bool foo (std::string const &);
template <typename T>
void bar (T const &, std::string const & s)
{
// expected unqualified call to N::foo()
foo (s);
}
void baz (std::string const & s)
{
bar (s);
}
} // namespace N
Ist das Verhalten, das xlC wirklich korrekt implementiert? Wo spricht der Standard 2003 oder 2011 darüber?
Muss ich Anforderung richtig, dass C++ 11 fällt die externe Verknüpfung lesen verwenden? – wilx
Ja, das ist richtig. – Casey
Diese Antwort könnte eine Zusammenfassung verwenden. –