This means that for std::tuple<T1,T2,...,Tn> , all Ti types must be implicitly built by default.
Implicitly constructed default tuple example
For example, since std::string and std::vector implicitly constructed by default (their default constructor is not explicit ), std::tuple<std::string, std::vector> :
void f(std::tuple<std::string, std::vector<int>>); f({});
Implicitly constructed default tuple example
With the implicit constructive default type A , std::tuple<std::string, A> cannot be implicitly built by default:
struct A { explicit A() = default; }; void f(std::tuple<std::string, A>); f({});
source share