diff options
author | Stephan Bergmann <sbergman@redhat.com> | 2023-03-28 10:14:58 +0200 |
---|---|---|
committer | Stephan Bergmann <sbergman@redhat.com> | 2023-03-28 10:58:45 +0000 |
commit | 7fcfc39232d2fea7078c15552ee092b973e9175b (patch) | |
tree | 2c0f14ce02596db2f56e08975410e93fb53342fc | |
parent | 5bcc7e6abfd8a0838f6f2c13b9e7040748913e28 (diff) |
Fix build for recent GCC
...after 58dd5870a77344754ea459d8423d1b3787a6a813 "Avoid dangling references to
temporary O[U]StringConcatMarker instances" caused e.g.
> In file included from /home/tdf/lode/jenkins/workspace/lo_callgrind_linux/include/rtl/string.hxx:49,
> from /home/tdf/lode/jenkins/workspace/lo_callgrind_linux/include/rtl/ustring.hxx:43,
> from /home/tdf/lode/jenkins/workspace/lo_callgrind_linux/include/osl/module.hxx:31,
> from /home/tdf/lode/jenkins/workspace/lo_callgrind_linux/sal/osl/all/loadmodulerelative.cxx:26:
> /home/tdf/lode/jenkins/workspace/lo_callgrind_linux/include/rtl/stringconcat.hxx:468:8: error: partial specialization ‘struct rtl::StringConcat<C, rtl::StringConcatMarker<C>, T2, Dummy>’ is not more specialized than [-fpermissive]
> 468 | struct StringConcat<C, StringConcatMarker<C>, T2, Dummy>
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> /home/tdf/lode/jenkins/workspace/lo_callgrind_linux/include/rtl/stringconcat.hxx:190:8: note: primary template ‘template<class C, class T1, class T2, typename std::enable_if<(allowStringConcat<C, T1> && allowStringConcat<C, T2>), int>::type <anonymous> > struct rtl::StringConcat’
> 190 | struct StringConcat
> | ^~~~~~~~~~~~
(<https://ci.libreoffice.org/job/lo_callgrind_linux/13174/>) with GCC 11.02.
(But what fixes it for recent versions of GCC would start to fail with
> In file included from sal/osl/all/loadmodulerelative.cxx:26:
> In file included from include/osl/module.hxx:31:
> In file included from include/rtl/ustring.hxx:43:
> In file included from include/rtl/string.hxx:49:
> include/rtl/stringconcat.hxx:468:8: error: non-type template argument specializes a template parameter with dependent type 'std::enable_if_t<allowStringConcat<C, T1> && allowStringConcat<C, T2>, int>' (aka 'typename enable_if<allowStringConcat<C, T1> && allowStringConcat<C, T2>, int>::type')
> struct StringConcat<C, StringConcatMarker<C>, T2>
> ^
> include/rtl/stringconcat.hxx:189:125: note: template parameter is declared here
> template <typename C, typename T1, typename T2, std::enable_if_t<allowStringConcat<C, T1> && allowStringConcat<C, T2>, int> = 0 >
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ^
for e.g. Clang 17 trunk.)
Change-Id: I6110d5a2813b561748654065e76bb4b6ab2f82d8
Reviewed-on: https://gerrit.libreoffice.org/c/core/+/149644
Tested-by: Jenkins
Reviewed-by: Stephan Bergmann <sbergman@redhat.com>
-rw-r--r-- | include/rtl/stringconcat.hxx | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/include/rtl/stringconcat.hxx b/include/rtl/stringconcat.hxx index c94f8b919e14..da32c7982792 100644 --- a/include/rtl/stringconcat.hxx +++ b/include/rtl/stringconcat.hxx @@ -464,8 +464,13 @@ using OUStringConcatMarker = StringConcatMarker<sal_Unicode>; template<typename C> constexpr bool allowStringConcat<C, StringConcatMarker<C>> = true; +#if defined __GNUC__ && !defined __clang__ +template <typename C, typename T2> +struct StringConcat<C, StringConcatMarker<C>, T2> +#else template <typename C, typename T2, std::enable_if_t<allowStringConcat<C, T2>, int> Dummy> struct StringConcat<C, StringConcatMarker<C>, T2, Dummy> +#endif { public: StringConcat( const T2& right_ ) : right( right_ ) {} |