特定のクラスでのテンプレート メンバー関数の特殊化に関して、g++ によって生成されるエラー メッセージに対処しようとしています。エラーメッセージが表示されます
error: specialization of ‘template<class T> std::vector<T>& push::GrammarEnv::stack_accessor()’ in different namespace [-fpermissive]
ただし、特殊化は同じ名前空間にあるようです。実際、名前空間を変更すると、テンプレート関数が宣言されていないというエラーが発生します。
この問題の原因は何ですか?また、特殊化が行われているとコンパイラが認識している名前空間をどのように確認できますか? エラー メッセージは、元の特殊化されていない関数宣言の名前空間を示しているだけです。