versiones tipo historia descargar datos compiler c++ c++11 tuples constexpr c++14

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.