Created on 2015-05-07.00:00:00 last changed 116 months ago
I do not believe that the wording in [meta.unary.prop] paragraph 3 allows for the following program to be ill-formed:
#include <type_traits> template <typename T> struct B : T { }; template <typename T> struct A { A& operator=(const B<T>&); }; std::is_assignable<A<int>, int> q;
In particular, I do not see where the wording allows for the "compilation of the expression" declval<T>() = declval<U>() to occur as a consequence of instantiating std::is_assignable<T, U> (where T and U are, respectively, A<int> and int in the example code).
Instantiating A<int> as a result of requiring it to be a complete type does not trigger the instantiation of B<int>; however, the "compilation of the expression" in question does.History | |||
---|---|---|---|
Date | User | Action | Args |
2015-05-07 00:00:00 | admin | create |