É possível detectar a participação no namespace em C ++?

Para tipos C ++, o<type_traits> O cabeçalho nos fornece muitos recursos úteis de reflexão em tempo de compilação. Por exemplo.std::is_base_of<B, D>::value determina em tempo de compilação seB é uma classe base deD.

Eu me pergunto se seria possível detectar membros do namespace em linhas similares? Por exemplo. dado um namespaceN com um tipoTexiste uma maneira de determinar seT está contido dentroN usando uma expressão macro do formulárioIS_NAMESPACE_MEMBER_OF(T,N).

Eu prefiro uma resposta em tempo de compilação através de qualquer tipo de truque SFINAE / ADL. Ou, se não for possível, algum tipo de raciocínio porque o Standard não permitiria isso.

Um hack não portátil e em tempo de execução seria regextypeid(T).name() paraN, mas isso é bastante entediante e não em tempo de compilação.

EDIT1: como apontado por K-ballo, um namespace não pode ser usado como um parâmetro de template, então um traço de tipo parece impossível.

EDIT2: aqui está o esqueleto sugerido por K-ballo: que teste bacana pode (ou não?) ser preparado lá em cima?

#define IS_NAMESPACE_MEMBER_OF(T, N) \
                                     \
// global declaration                \
void test(T);                        \
                                     \
// namespace declaration             \
namespace N {                        \
    void test(T);                    \
}                                    \
                                     \
// some clever name lookup / sizeof / SFINAE test!     

questionAnswers(1)

yourAnswerToTheQuestion