dimanche 4 février 2018

Understanding how declval is working in the copy_assignment situation

I was watching Dr. Walter E. Brown's Template Meta-programming talk. In his presentation he presents code like so for is_copy_assignable:

template<class U, class = decltype(declval<U&>() = declval<U const&>())>
static true_type try_assignment(U &&);

What I am having trouble with is how is the assignment operator being called in this instance. When I try and reason about this code and say substitute a dummy type, say int, in place of the U I get:

template<class U, class = decltype(declval<int&>() = declval<int const&>())> template<class U, class = decltype(int& = int const&)>

So I am wondering then how can this help us determine if the assignment operator is valid. If I understand declval correctly this code will not even evaluate so then how can one determine from int& = int const&, which doesn't even evaluate, if there is or isn't a assignment operator defined for U.

I understand that in most cases the copy-assignment operator would be defined as

C& operator=(const C& other)

which looks a lot like what is above, but still since nothing is being evaluated then what use is this information.

Aucun commentaire:

Enregistrer un commentaire