zhao
zhao

Reputation: 232

How to disable a specific warning in g++

First of all I don't know why "g++ -std=c++0x -Wall" would give me warning: invalid suffix on literal; C++11 requires a space between literal and string macro [-Wliteral-suffix] on the following program:

#include <iostream>

#define BEGIN   "<b>"
#define END "</b>"

#pragma GCC diagnostic ignored "-Wliteral-suffix"
int main()
{
  std::cout << "hello " BEGIN"world"END "\n";
}

Second, I followed gcc doc to ignore "-Wliteral-suffix" but still got the warning. How do I suppress the warning? And why does the compiler warn in the first place?

Upvotes: 2

Views: 2071

Answers (1)

H. Guijt
H. Guijt

Reputation: 3375

Ok, to summarize: the failure to suppress the warning is a known gcc bug (gcc.gnu.org/bugzilla/show_bug.cgi?id=61653). Since you cannot (and really, should not) suppress the warning, the easiest fix is to put a space between the literal and the #define string. You can safely do this; it won't change the output text.

The reason this is no longer allowed is because characters directly after a literal string are treated as user-defined literals, which is a new feature in C++11. User-defined literals are considered to be part of the same single token as the literal they modify, thus END will not be subject to replacement by the earlier #define.

Upvotes: 3

Related Questions