Newline in raw string literals blow up macro expansion

Solution Unverified - Updated -

Issue

A raw string literal should become a single pptoken before macros are expanded. GCC seems to disagree:

$ g++ --version
g++ (GCC) 4.7.0 20120507 (Red Hat 4.7.0-5)
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ rpm -qf `which g++`
devtoolset-1.0-gcc-c++-4.7.0-5.3.el5
$ cat raw_string_literal.cpp
#define STR(lit) lit

const char x[] = R"(
x)";
const char y[] = STR(R"(
x)");
$ g++ -std=c++11 raw_string_literal.cpp
raw_string_literal.cpp:5:22: error: unterminated raw string
raw_string_literal.cpp:5:1: error: stray 'R' in program
raw_string_literal.cpp:6:3: warning: missing terminating " character [enabled by default]
raw_string_literal.cpp:5:1: error: missing terminating " character
raw_string_literal.cpp:5:18: error: initializer fails to determine size of 'y'
raw_string_literal.cpp:5:18: error: expected ',' or ';' at end of input

Environment

  • Red Hat Developer Toolset 1.1

Subscriber exclusive content

A Red Hat subscription provides unlimited access to our knowledgebase, tools, and much more.

Current Customers and Partners

Log in for full access

Log In

New to Red Hat?

Learn more about Red Hat subscriptions

Using a Red Hat product through a public cloud?

How to access this content