私がソースで持っていたコンパイルの問題の手がかりを探しているうちに、関数の参照に関連してこのbug report (against Mozilla's JavaScript engine source)が見つかりました。バグレポートからの引用:テンプレート関数からの静的関数参照の問題xlC
TypedArrayTemplateは(明らかに)テンプレートであり、それはで「::」を接頭語として使用せずにINT_TO_JSVAL、静的インライン関数を、参照しています。これはINT_TO_JSVALを解決できないため、xlCを中断します。標準では、テンプレート引数のコンテキストで非修飾名が見つからない場合、静的なものを考慮する必要はありません。 g ++はこのフォールバックを行いますが、xlCはそうしません。
コンパイラからの有益なメッセージ:私の場合は
(I) Static declarations are not considered for a function call if the function is not qualified.
失敗したコードは、これに類似していた:
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
はのxlCが本当に正しい実装振る舞いですか?これについて2003年か2011年の標準はどこで話していますか?
の以前のバージョンを使用して、私はC++ 11は、外部リンケージの要件をドロップすることを正しく読んでくださいしている場合は? – wilx
はい、正しいです。 – Casey
この回答は要約を使用することができます。 –