#ifndef GENERS_IOISEXTERNAL_HH_ #define GENERS_IOISEXTERNAL_HH_ namespace gs { template struct IOIsExternal { enum {value = 0}; }; } // Use the following macro (outside of any namespace) // to declare some type as external for I/O purposes // #define gs_declare_type_external(T) /**/ \ namespace gs { \ template <> struct IOIsExternal {enum {value = 1};}; \ template <> struct IOIsExternal {enum {value = 1};}; \ template <> struct IOIsExternal {enum {value = 1};}; \ template <> struct IOIsExternal {enum {value = 1};}; \ } // Use the following macro (outside of any namespace) // to declare some template parameterized by one argument // as external for I/O purposes // #define gs_declare_template_external_T(name) /**/ \ namespace gs { \ template struct IOIsExternal< name > \ {enum {value = 1};}; \ template struct IOIsExternal > \ {enum {value = 1};}; \ template struct IOIsExternal > \ {enum {value = 1};}; \ template struct IOIsExternal > \ {enum {value = 1};}; \ } // Use the following macro (outside of any namespace) // to declare some template parameterized by two arguments // as external for I/O purposes // #define gs_declare_template_external_TT(name) /**/ \ namespace gs { \ template struct IOIsExternal< name > \ {enum {value = 1};}; \ template struct IOIsExternal > \ {enum {value = 1};}; \ template struct IOIsExternal > \ {enum {value = 1};}; \ template struct IOIsExternal >\ {enum {value = 1};}; \ } // Use the following macro (outside of any namespace) // to declare some template parameterized by three arguments // as external for I/O purposes // #define gs_declare_template_external_TTT(name) /**/ \ namespace gs { \ template \ struct IOIsExternal< name > \ {enum {value = 1};}; \ template \ struct IOIsExternal > \ {enum {value = 1};}; \ template \ struct IOIsExternal > \ {enum {value = 1};}; \ template \ struct IOIsExternal > \ {enum {value = 1};}; \ } // Use the following macro (outside of any namespace) // to declare some template parameterized by four arguments // as external for I/O purposes // #define gs_declare_template_external_TTTT(name) /**/ \ namespace gs { \ template \ struct IOIsExternal< name > \ {enum {value = 1};}; \ template \ struct IOIsExternal > \ {enum {value = 1};}; \ template \ struct IOIsExternal > \ {enum {value = 1};}; \ template \ struct IOIsExternal > \ {enum {value = 1};}; \ } // Use the following macro (outside of any namespace) // to declare some template parameterized by five arguments // as external for I/O purposes // #define gs_declare_template_external_TTTTT(name) /**/ \ namespace gs { \ template \ struct IOIsExternal< name > \ {enum {value = 1};}; \ template \ struct IOIsExternal > \ {enum {value = 1};}; \ template \ struct IOIsExternal > \ {enum {value = 1};}; \ template \ struct IOIsExternal > \ {enum {value = 1};}; \ } // Use the following macro (outside of any namespace) // to declare some template parameterized by six arguments // as external for I/O purposes // #define gs_declare_template_external_TTTTTT(name) /**/ \ namespace gs { \ template \ struct IOIsExternal< name > \ {enum {value = 1};}; \ template \ struct IOIsExternal > \ {enum {value = 1};}; \ template \ struct IOIsExternal > \ {enum {value = 1};}; \ template \ struct IOIsExternal > \ {enum {value = 1};}; \ } #endif // GENERS_IOISEXTERNAL_HH_