The following code compiles fine on msvc and clang 17+ but does not on compile on gcc 14 or clang <= 16. However, it compiles as soon as I move the inner struct out to global scope.
#include <tuple>
template<typename ...Ts> struct myTemplate
{
using MyTuple = std::tuple<Ts...>;
myTemplate() = default;
MyTuple tupleMember;
};
struct myOuterStruct
{
struct myInnerStruct
{
int someMember=0;
};
myTemplate<myInnerStruct> someMember;
};
myOuterStruct someVariable;
The error is that there is no default constructor for the tuple, even though the inner struct is default constructible indeed.
<source>:23:15: error: call to implicitly-deleted default constructor of 'myOuterStruct'
myOuterStruct someVariable;
^
<source>:19:31: note: default constructor of 'myOuterStruct' is implicitly deleted because field 'someMember' has a deleted default constructor
myTemplate<myInnerStruct> someMember;
^
<source>:7:5: note: explicitly defaulted function was implicitly deleted here
myTemplate() = default;
^
<source>:9:13: note: default constructor of 'myTemplate<myOuterStruct::myInnerStruct>' is implicitly deleted because field 'tupleMember' has no default constructor
MyTuple tupleMember;
Anyone could shed some light into this?
I prepared it in godbolt here: https://godbolt.org/z/b5b4Y43q7
Thanks in advance!