Conceptos de C ++ iguales y asignables
He estado experimentando con conceptos de C ++ recientemente. Estoy probando las definiciones del siguiente documento de Extensiones de rangos:
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2016/n4569.pdf
Las definiciones y usos deSame
me confunden Por razones desconocidas para mí, los autores no dieron una definición explícita. Entonces estoy usando:
template <class T, class U>
concept bool Same()
{
return std::is_same<T, U>::value;
}
El problema es que el documento da la siguiente definición paraAssignable
:
template <class T, class U>
concept bool Assignable()
{
return Common<T, U>() && requires(T&& a, U&& b) {
{ std::forward<T>(a) = std::forward<U>(b) } -> Same<T&>;
};
}
No funciona (bajo GCC 6.3): un simpleAssignable<int&, int&&>()
la verificación de concepto me dafalse
(He verificado que elCommon
parte está bien). tengo que cambiarSame<T&>
aT&
para que parezca que funciona. Lo mismoSame<Type>
check también se usa en otros lugares.
Mis preguntas son:
Es mi definición deSame
¿correcto?Por que esSame<T&>
utilizado en lugar deT&
? ¿Cuáles son las diferencias?Gracias por cualquier ayuda.