无法识别C ++文字运算符模板

时间:2016-10-31 08:24:32

标签: c++ literals

为什么不识别以下文字操作员模板?

template<char... Chars>
constexpr int operator"" _p(){
    return 0;
}

int main()
{
    int  fs1 = "123"_p;
}

更新的 感谢我现在使用的答案:

#include <avr/pgmspace.h>

template<typename C, C... CC>
struct PgmString {
    static constexpr const char* str(){
        return &data[0];
    }
    static constexpr const char data[] PROGMEM = {CC..., '\0'};
};
template<typename C, C... CC>
constexpr const char PgmString<C, CC...>::data[] PROGMEM;

template<typename C, C... CC>
constexpr PgmString<C, CC...> operator"" _pgm(){
    return PgmString<C, CC...>();
}

这会将字符串放入AVR微控制器的闪存中。 但是如果我将文字字符串长度增加一个字符,则使用的闪存大小会增加两(!)个字节。

2 个答案:

答案 0 :(得分:6)

gcc / clang的扩展程序允许:

template<typename Char, Char... Cs>
constexpr int operator"" _p(){
    return 0;
}

然后

int main()
{
    int  fs1 = "123"_p;
}

答案 1 :(得分:5)

您期望的文字形式不存在。只有整数和浮动文字才有模板形式;字符串和字符文字没有。