[Bug c++/60796] Default move constructor not generated by explicit template instantiation
redi at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Apr 21 09:38:00 GMT 2016
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=60796
Jonathan Wakely <redi at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Keywords| |wrong-code
Status|UNCONFIRMED |NEW
Last reconfirmed| |2016-04-21
Ever confirmed|0 |1
Known to fail| |5.3.0, 6.0, 7.0
--- Comment #3 from Jonathan Wakely <redi at gcc dot gnu.org> ---
Clang and G++ behave the same, they don't emit the defaulted members in either
translation unit. EDG emits them in main.o where they are needed (but not in
A.o)
template <typename T>
struct shared_ptr {
shared_ptr(T*) { }
shared_ptr(const shared_ptr&) { }
shared_ptr(shared_ptr&&) { }
~shared_ptr() { }
};
template <typename T>
struct A
{
A (T* a) : a(a) {}
A() = default;
A(A&&) = default;
A& operator =(const A&) = default;
shared_ptr<T> a;
};
extern template struct A<int>;
int main()
{
A<int> a = new int(19);
A<int> b = static_cast<A<int>&&>(a);
}
g++ -c main.C
nm -C main.o
U _Unwind_Resume
0000000000000000 W shared_ptr<int>::~shared_ptr()
0000000000000000 W shared_ptr<int>::~shared_ptr()
0000000000000000 n shared_ptr<int>::~shared_ptr()
U A<int>::A(A<int>&&)
U A<int>::A(int*)
0000000000000000 W A<int>::~A()
0000000000000000 W A<int>::~A()
0000000000000000 n A<int>::~A()
U operator new(unsigned long)
U __gxx_personality_v0
0000000000000000 T main
clang++ -std=c++11 -c main.C
nm -C main.o
0000000000000000 r GCC_except_table0
U _Unwind_Resume
0000000000000000 W shared_ptr<int>::~shared_ptr()
U A<int>::A(A<int>&&)
U A<int>::A(int*)
0000000000000000 W A<int>::~A()
U operator new(unsigned long)
U __gxx_personality_v0
0000000000000000 T main
edg --c++11 main.C
nm -C main.o
000000000000015c W shared_ptr<int>::~shared_ptr()
00000000000001a0 W shared_ptr<int>::~shared_ptr()
00000000000002a8 T A<int>::A(A<int>&&)
00000000000001e4 T A<int>::A(int*)
0000000000000344 T A<int>::A(A<int>&&)
0000000000000280 T A<int>::A(int*)
000000000000036c W A<int>::~A()
0000000000000474 W A<int>::~A()
U operator delete(void*)
U operator new(unsigned long)
0000000000000004 C __EDGCPFE__4_9
0000000000000050 d __T12929048.1926
0000000000000040 d __T12932616.1915
0000000000000060 d __T12934328.1936
0000000000000000 d __T12936536.1896
U __curr_eh_stack_entry
U __eh_curr_region
0000000000000000 T main
More information about the Gcc-bugs
mailing list