C ++宏用什么都不替换文本

时间:2014-04-28 21:54:40

标签: c++ macros

宏通常用于文本替换。在我的情况下,我需要有条不紊地删除一些关键字,以便在没有特定功能的编译器中进行编译。

具体来说,我一直在调查cpp11 range此代码段来自哪个

template <typename C>
struct has_size {
    template <typename T>
    static constexpr auto check(T*) -> // problem in VS2013
        typename std::is_integral<
            decltype(std::declval<T const>().size())>::type;
// .. some more stuff
};

我提供这个作为产生问题的例子。在上面的代码中我最终做了

template <typename T>
static 
#if COMPILE_WITH_GCC_NEW_ENOUGH
    constexpr 
#endif
auto check(T*) -> 

因为还有其他部分constexpr需要用const替换才能编译。

我要问的是一种说法,例如

#define Constexpr ?????????

这样它就会被gcc编译中的constexpr替换,而VS编译中的文本上没有

1 个答案:

答案 0 :(得分:2)

当然,简单地说:

#define constexpr

会将constexpr扩展为空。对于不支持此功能的编译器,您可以将此宏定义包装在适当的#if内。

有时候人们会使“空”扩展变得更加明确:

#define constexpr /* nothing */