Regression: cannot build cmake with gcc 4.9.2
Attempts to build cmake with gcc 4.9.2 now fail with the following error:
/data/1/adar/cmake/Tests/CMakeLib/testString.cxx: In function ‘bool testAddition()’:
/data/1/adar/cmake/Tests/CMakeLib/testString.cxx:1012:93: error: inconsistent user-defined literal suffixes ‘a’ and ‘b’ in string literal
ASSERT_TRUE(cm::String("a"_s) + "b"_s == "ab"_s);
^
/data/1/adar/cmake/Tests/CMakeLib/testString.cxx:1012:117: error: unable to find string literal operator ‘operator""a’
ASSERT_TRUE(cm::String("a"_s) + "b"_s == "ab"_s);
^
/data/1/adar/cmake/Tests/CMakeLib/testString.cxx:1013:83: error: inconsistent user-defined literal suffixes ‘ab’ and ‘a’ in string literal
ASSERT_TRUE("ab"_s == "a"_s + cm::String("b"_s));
^
/data/1/adar/cmake/Tests/CMakeLib/testString.cxx:1013:117: error: unable to find string literal operator ‘operator""ab’
ASSERT_TRUE("ab"_s == "a"_s + cm::String("b"_s));
^
/data/1/adar/cmake/Tests/CMakeLib/testString.cxx:1014:91: error: inconsistent user-defined literal suffixes ‘a’ and ‘b’ in string literal
ASSERT_TRUE("a"_s + cm::String("b"_s) + "c"_s == "abc"_s);
^
/data/1/adar/cmake/Tests/CMakeLib/testString.cxx:1014:135: error: unable to find string literal operator ‘operator""a’
ASSERT_TRUE("a"_s + cm::String("b"_s) + "c"_s == "abc"_s);
^
/data/1/adar/cmake/Tests/CMakeLib/testString.cxx:1015:93: error: inconsistent user-defined literal suffixes ‘abc’ and ‘a’ in string literal
ASSERT_TRUE("abc"_s == "a"_s + cm::String("b"_s) + "c"_s);
^
/data/1/adar/cmake/Tests/CMakeLib/testString.cxx:1015:135: error: unable to find string literal operator ‘operator""abc’
ASSERT_TRUE("abc"_s == "a"_s + cm::String("b"_s) + "c"_s);
^
/data/1/adar/cmake/Tests/CMakeLib/testString.cxx:1016:102: error: inconsistent user-defined literal suffixes ‘a’ and ‘b’ in string literal
ASSERT_TRUE("a"_s + (cm::String("b"_s) + "c"_s) + "d"_s == "abcd"_s);
^
/data/1/adar/cmake/Tests/CMakeLib/testString.cxx:1016:157: error: unable to find string literal operator ‘operator""a’
ASSERT_TRUE("a"_s + (cm::String("b"_s) + "c"_s) + "d"_s == "abcd"_s);
^
/data/1/adar/cmake/Tests/CMakeLib/testString.cxx:1017:105: error: inconsistent user-defined literal suffixes ‘abcd’ and ‘a’ in string literal
ASSERT_TRUE("abcd"_s == "a"_s + (cm::String("b"_s) + "c"_s) + "d"_s);
^
/data/1/adar/cmake/Tests/CMakeLib/testString.cxx:1017:157: error: unable to find string literal operator ‘operator""abcd’
ASSERT_TRUE("abcd"_s == "a"_s + (cm::String("b"_s) + "c"_s) + "d"_s);
^
make[2]: *** [Tests/CMakeLib/CMakeFiles/CMakeLibTests.dir/testString.cxx.o] Error 1
make[1]: *** [Tests/CMakeLib/CMakeFiles/CMakeLibTests.dir/all] Error 2
My build environment is CentOS 6.6 with devtoolset-3 installed.
I used git bisect
to identify the commit that introduced this build regression:
commit a0841b59bdacc1e550e6607d9e44e79ae456cd19
Author: Brad King <brad.king@kitware.com>
Date: Fri Dec 7 21:08:17 2018 -0500
String: Add support for a ""_s string literal syntax
Create a `static_string_view` type that binds only to the static storage
of string literals. Teach `cm::String` to borrow from these implicitly.
Looks like every cmake release since 3.14.0 is affected.