Uso do argumento void template na implementação do idioma de detecção precoce

Non4502 os autores descrevem uma implementação precoce do idioma de detecção que encapsula ovoid_t truque. Aqui está sua definição, juntamente com o uso para definir uma característica parais_assignable (realmente éis_copy_assignable)

template<class...>
using void_t = void;

// primary template handles all types not supporting the operation:
template< class, template<class> class, class = void_t< > >
struct
detect : std::false_type { };
// specialization recognizes/validates only types supporting the archetype:
template< class T, template<class> class Op >
struct
detect< T, Op, void_t<Op<T>> > : std::true_type { };

// archetypal expression for assignment operation:
template< class T >
using
assign_t = decltype( std::declval<T&>() = std::declval<T const &>() );

// trait corresponding to that archetype:
template< class T >
using
is_assignable = detect<void, assign_t, T>;

Eles mencionam que não gostam disso por causa davoid&nbsp;usado nois_assignable&nbsp;traço:

Embora o código resultante seja significativamente mais compreensível que o original, não gostamos da interface de detecção acima, porque ovoid&nbsp;O argumento na chamada de metafunção é um detalhe de implementação que não deve vazar para o código do cliente.

No entanto, ovoid&nbsp;não faz nenhum sentido para mim em primeiro lugar. Se eu tentar usar esse tipo de característica para detectar seint&nbsp;é cópia atribuível, eu recebostd::false_type Demo.

Se eu reescreveris_assignable&nbsp;Como:

template< class T >
using
is_assignable = detect<T, assign_t>;

O que faz mais sentido para mim, então a característica parece funcionar corretamente:Demo

Então, minha pergunta aqui éEstou entendendo mal algo neste documento ou foi simplesmente um erro de digitação?

Se issoestava&nbsp;um erro de digitação, então eu não entendo por que os autores sentiram a necessidade de discutir como eles não gostavamvoid&nbsp;vazando, o que me dá certeza de que estou perdendo alguma coisa.