Подумайте об этом:
namespace foo
{
struct Bar
{
void func();
};
}
void Bar::func() { /*impl...*/ }
Ваш код не работает по той же причине, по которой этот код не работает - определение предоставлено в неверной области. Что нужно это:
void foo::Bar::func() { /*impl...*/ }
Но что вы ставите вместо foo::
для обозначения имени анонимного пространства имен? У него его нет.
Итог: невозможно объявить что-либо внутри анонимного пространства имен, а затем определить это в другом месте, так как не существует механизма для определения правильной области.