罗勇刚(Yonggang Luo)
2009-Sep-13 11:06 UTC
[LLVMdev] Is it possible using anonymous namespace on template in header files.
for example
/// getPointerUnionTypeNum - If the argument has type PT1* or PT2* return
/// false or true respectively.
template <typename PT1, typename PT2>
static inline int getPointerUnionTypeNum(PT1 *P) { return 0; }
template <typename PT1, typename PT2>
static inline int getPointerUnionTypeNum(PT2 *P) { return 1; }
template <typename PT1, typename PT2>
static inline int getPointerUnionTypeNum(...) { return -1; }
it's a peace of code comes from PointerUnion.h
can it change to be
namespace{
template <typename PT1, typename PT2>
inline int getPointerUnionTypeNum(PT1 *P) { return 0; }
template <typename PT1, typename PT2>
inline int getPointerUnionTypeNum(PT2 *P) { return 1; }
template <typename PT1, typename PT2>
inline int getPointerUnionTypeNum(...) { return -1; }
}
--
此致
礼
罗勇刚
Yours
sincerely,
Yonggang Luo
Sebastian Redl
2009-Sep-13 13:19 UTC
[LLVMdev] Is it possible using anonymous namespace on template in header files.
罗勇刚(Yonggang Luo) wrote:> for example > /// getPointerUnionTypeNum - If the argument has type PT1* or PT2* return > /// false or true respectively. > template <typename PT1, typename PT2> > static inline int getPointerUnionTypeNum(PT1 *P) { return 0; } > template <typename PT1, typename PT2> > static inline int getPointerUnionTypeNum(PT2 *P) { return 1; } > template <typename PT1, typename PT2> > static inline int getPointerUnionTypeNum(...) { return -1; } > > it's a peace of code comes from PointerUnion.h > > can it change to be > namespace{ > template <typename PT1, typename PT2> > inline int getPointerUnionTypeNum(PT1 *P) { return 0; } > template <typename PT1, typename PT2> > inline int getPointerUnionTypeNum(PT2 *P) { return 1; } > template <typename PT1, typename PT2> > inline int getPointerUnionTypeNum(...) { return -1; } > } >Using the anonymous namespace in a header file is generally a very bad idea. The problem is that it is a different namespace in every translation unit. This can lead to subtle errors or simply undesirable behavior. Why would you want these functions in the AN anyway? Sebastian