3

通常の文字列リテラルからユーザー定義リテラルを作成するマクロを作成しようとしています。次の 2 行で token を作成する必要があります"foobar"_literal

#define AS_LITERAL(TEXT) TEXT ## _literal
AS_LITERAL("foobar");

ただし、 GCC-4.7のプリプロセッサは次のエラーを報告します。

error: pasting ""foobar"" and "_literal" does not give a valid preprocessing token

それを正しく行う方法は?

4

1 に答える 1

5

適切に定義されたもので動作しますoperator "" _literal(GCC 4.7 も使用):

#include <cstdlib>

#define AS_LITERAL(TEXT) TEXT ## _literal

constexpr int operator "" _literal(char const*, std::size_t) { return 0; }

int main() {
    int x = AS_LITERAL("abc");
}
于 2012-07-08T16:59:56.923 に答える