[Bug c++/104255] New: parsing trailing return type fails with parameter pack expansion when two parameter packs at present
nickhuang99 at hotmail dot com
gcc-bugzilla@gcc.gnu.org
Wed Jan 26 22:51:32 GMT 2022
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104255
Bug ID: 104255
Summary: parsing trailing return type fails with parameter pack
expansion when two parameter packs at present
Product: gcc
Version: 12.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: nickhuang99 at hotmail dot com
Target Milestone: ---
The following template function causes error when we define trailing return
type which is identical to what function body actual returning
( https://www.godbolt.org/z/n3nbW785o )
template<size_t N, size_t...Is>
constexpr size_t identity2(index_sequence<Is...>seq){
return N;
}
template<size_t...Seq1, size_t...Seq2>
auto getSeq2(index_sequence<Seq1...>seq1, index_sequence<Seq2...>seq2)
// this trailing return type causing parsing error of parameter pack
->index_sequence<(identity2<Seq1, Seq2...>(seq2))...>;
{
return index_sequence<(identity2<Seq1, Seq2...>(seq2))...>{};
}
As a positive example against above, when "identity1" takes no parameter pack
as template argument, it works fine.
template<size_t N>
constexpr size_t identity1(){
return N;
}
template<size_t...Indexes>
auto getSeq1(index_sequence<Indexes...>indexes)
// trailing return type works, no need to define function body at all.
->index_sequence<(identity1<Indexes>())...>;
clang13/MSVC all work as expected.
More information about the Gcc-bugs
mailing list