This is the mail archive of the
gcc-bugs@gcc.gnu.org
mailing list for the GCC project.
[Bug c++/78358] New: [7 Regression] wrong types for std::typle decomposition
- From: "trippels at gcc dot gnu.org" <gcc-bugzilla at gcc dot gnu dot org>
- To: gcc-bugs at gcc dot gnu dot org
- Date: Tue, 15 Nov 2016 06:40:46 +0000
- Subject: [Bug c++/78358] New: [7 Regression] wrong types for std::typle decomposition
- Auto-submitted: auto-generated
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=78358
Bug ID: 78358
Summary: [7 Regression] wrong types for std::typle
decomposition
Product: gcc
Version: 7.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: c++
Assignee: unassigned at gcc dot gnu.org
Reporter: trippels at gcc dot gnu.org
Target Milestone: ---
gcc uses rvalue references instead of the plain types.
markus@x4 tmp % cat strc.cpp
#include <iostream>
#include <tuple>
template <typename, typename> struct same_type;
template <typename T> struct same_type<T, T> {};
int main() {
// std::tuple tuple(1, 'a', 2.3, true);
auto tuple = std::make_tuple(1, 'a', 2.3, true);
auto[i, c, d, b] = tuple;
same_type<std::tuple_element<0, decltype(tuple)>::type, decltype(i)>{};
same_type<decltype(i), int>{};
same_type<decltype(c), char>{};
same_type<decltype(d), double>{};
same_type<decltype(b), bool>{};
std::cout << std::boolalpha;
std::cout << "i=" << i << " c=" << c << " d=" << d << " b=" << b << '\n';
}
markus@x4 tmp % clang++ -Wno-unused-value -stdlib=libc++ -std=c++1z strc.cpp
markus@x4 tmp % g++ -std=c++1z strc.cpp
strc.cpp: In function ‘int main()’:
strc.cpp:11:72: error: invalid use of incomplete type ‘struct same_type<int,
int&&>’
same_type<std::tuple_element<0, decltype(tuple)>::type, decltype(i)>{};
^
strc.cpp:4:38: note: declaration of ‘struct same_type<int, int&&>’
template <typename, typename> struct same_type;
^~~~~~~~~
strc.cpp:12:31: error: invalid use of incomplete type ‘struct same_type<int&&,
int>’
same_type<decltype(i), int>{};
^
strc.cpp:4:38: note: declaration of ‘struct same_type<int&&, int>’
template <typename, typename> struct same_type;
^~~~~~~~~
strc.cpp:13:32: error: invalid use of incomplete type ‘struct same_type<char&&,
char>’
same_type<decltype(c), char>{};
^
strc.cpp:4:38: note: declaration of ‘struct same_type<char&&, char>’
template <typename, typename> struct same_type;
^~~~~~~~~
strc.cpp:14:34: error: invalid use of incomplete type ‘struct
same_type<double&&, double>’
same_type<decltype(d), double>{};
^
strc.cpp:4:38: note: declaration of ‘struct same_type<double&&, double>’
template <typename, typename> struct same_type;
^~~~~~~~~
strc.cpp:15:32: error: invalid use of incomplete type ‘struct same_type<bool&&,
bool>’
same_type<decltype(b), bool>{};
^
strc.cpp:4:38: note: declaration of ‘struct same_type<bool&&, bool>’
template <typename, typename> struct same_type;
^~~~~~~~~