В такой ситуации
namespace n {
void f() {
void another_function();
}
}
Должна ли функция another_function
быть определена внутри пространства имен n
или вне его? VS 2012 (с ноябрьская CTP) говорит, что он должен быть снаружи, а GCC 4.7.2 на Mac говорит, что он должен быть внутри. Если я сделаю что-то неправильное, я получу неопределенные ошибки символов от компоновщиков.
Обычно я считаю, что GCC лучше соответствует стандарту, но это C++, и вы никогда не можете быть в этом уверены.
another_function
— это деталь реализации, аf
— это шаблон. - person Seth Carnegie   schedule 03.01.2013another_function
внутриf
не делает его менее заметным, чемf
. Это просто вызовет несколько ошибок определения, если кто-то определит свой собственныйn::another_function
. - person Billy ONeal   schedule 03.01.2013your_namespace::detail
. Во всяком случае, это то, что Boost делает в этих ситуациях. По соглашению все, что находится внутри пространства именdetail
, является деталями реализации. - person Billy ONeal   schedule 03.01.2013