Do you mean that all multiply_traits shall be defined in a namespace such as B::detail?
Yes. In template libraries you often need namespace scope helper classes and functions that should not be visible to the user.
I'm confused. You agreed above that multiply_traits shall be defined in B::detail. Down below, you said that it's better not to put user defined code in B::detail, while multiply_traits corresponding to X1, X2,..., are user defined code. Then where do I need to put multiply_traits?
When new classes X1, X2, ... are defined, I need to define the corresponding multiply_traits in B::detail. If the library B (with namespace B) is designed such that nothing is defined in namespace B::detail, then the users can define whatever they want in B::detail, as there would be no conflicting between their code and the library code, right?
They could, in that the language does not forbid it, but I would consider it a bad idea to put user code in a namespace nested within a library's namespace.