historia - tipo de datos c++
¿Por qué std:: tie no está marcado como constexpr para C++ 14? (1)
Esta es una pregunta de seguimiento para mis preguntas anteriores "¿Qué partes de la biblioteca estándar de C ++ 14 podrían ser y qué partes se harán constexpr
?" y "¿Pautas para hacer constexpr
operador constexpr
?"
En el mundo del tiempo de ejecución, un buen lenguaje para sobrecargar al operator<
para una estructura de varios miembros de datos, es usar std::tie
para convertir una estructura en un std::tuple
y piggy-back en su operator<
que hace lo correcto ™ (comparación lexicográfica en los distintos miembros).
En C ++ 14, muchas partes de std::tuple
se hacen constexpr
, en particular make_tuple
, std::get
y el operator<
mencionado anteriormente operator<
. Sin embargo, parece que el std::tie
aparentemente relacionado no está marcado como constexpr
. Esto es bastante molesto porque hace que definir tipos literales definidos por el usuario que se pueden comparar en tiempo de compilación sea más detallado de lo necesario.
Pregunta: ¿existen razones técnicas por las cuales std::tie
no esté marcado como constexpr
para C ++ 14?
ACTUALIZACIÓN : LWG número 2301 , implementado en libc ++ y libstdc ++ bug 65978
ACTUALIZACIÓN2 : corregido por @JonathanWakely un poco más de 3 horas después de someter el informe de error libstdc ++!
En cualquier caso en el que se utilice la constexpr
, make_tuple
debe comportarse exactamente igual que el tie
excepto que teóricamente el tie
agregaría un nivel adicional de indirección innecesaria a partir de las referencias. Por lo tanto, no es necesario que el tie
sea constexpr
ya que make_tuple
serviría para ese propósito.