Variant fails with private default constructor
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 3/5
- Tiempo estimado
- 1-2 días
- Aptitud para principiantes
- 45/100
Línea de trabajo
Comienza con el ejemplo mínimo y la versión del compilador indicados en el issue y, después, inspecciona boost/variant/variant.hpp alrededor de find_fallback_type y boost/type_traits/has_nothrow_constructor.hpp. Confirma el fallo y compara el comportamiento con Boost.Variant2; se considera terminado cuando el ejemplo compila con un constructor predeterminado privado en las versiones afectadas de GCC sin romper el comportamiento de fallback existente.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Boost.Variant fails if its types have a private default constructor, using gcc 12.2
Minimal example: https://godbolt.org/z/cG4PnW8ee
#include <boost/variant.hpp>
#include <boost/variant2.hpp>
class Foo
{
public:
Foo(int a_) : a(a_) {}
int a;
private:
Foo();
};
struct Voo
{
Foo f;
double d;
};
struct Doo
{
Foo f;
int s;
};
#ifndef USE_VARIANT2
using VooDoo = boost::variant<Voo, Doo>;
void testVooDoo(const VooDoo& voodoo)
{
VooDoo v{Voo{Foo(3)}};
}
#else
using VooDoo = boost::variant2::variant<Voo, Doo>;
void testVooDoo(const VooDoo& voodoo)
{
VooDoo v{Voo{Foo(3)}};
}
#endif
If I change to use Boost.Variant2, it works.
If I go back to gcc 7.5, it works (fails after that version).
The error shows:
/opt/compiler-explorer/libs/boost_1_80_0/boost/variant/variant.hpp:194:17: required from 'struct boost::detail::variant::find_fallback_type<boost::mpl::l_item<mpl_::long_<2>, Voo, boost::mpl::l_item<mpl_::long_<1>, Doo, boost::mpl::l_end> > >'
/opt/compiler-explorer/libs/boost_1_80_0/boost/variant/variant.hpp:1252:17: required from 'class boost::variant<Voo, Doo>'
<source>:26:16: required from here
/opt/compiler-explorer/libs/boost_1_80_0/boost/type_traits/has_nothrow_constructor.hpp:27:84: error: 'Foo::Foo()' is private within this context
27 | template <class T> struct has_nothrow_constructor : public integral_constant<bool, BOOST_HAS_NOTHROW_CONSTRUCTOR(T)>{};
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<source>:9:9: note: declared private here
9 | Foo();
| ^~~
It mentions find_fallback_type, so I guess that at some point it tries to determine the "fallback type" to default construct the VooDoo.
However, nowhere in my program I need to default construct a VooDoo, so I'm not sure why that type needs to be "computed".
Also, somehow Boost.Variant2 doesn't fail, so there must be a way to make this work.
- Lenguaje dominante
- C++
- Estrellas
- 47
- Forks
- 72
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Preparar el entorno
Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de boostorg/variant
-
Operator <=> in Boost.VariantAbierto
Dificultad 4/5 3-5 días Aptitud para principiantes 45/100
-
Dificultad 4/5 3-5 días Aptitud para principiantes 35/100
-
Surprising behavior of variant with is_constructible, is_assignable and is_convertible traitsAbierto
Dificultad 4/5 3-5 días Aptitud para principiantes 30/100
-
Dificultad 3/5 1-2 días Aptitud para principiantes 35/100
-
Generic comparison operatorsAbierto
Dificultad 5/5 Más de una semana Aptitud para principiantes 25/100
Todos los issues de boostorg/variant
Issues similares
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
Los mantenedores suelen responder en 1 día
-
enhancement Ready for final check
Dificultad 2/5 1-3 horas Aptitud para principiantes 79/100
mpogue2/SquareDesk#1818 · 1 comentario ·
-
launch-client --save-creds creates creds/<account>/ with mode 755, not 700Posiblemente ocupada @metis-sprock la tomó hoy. Abiertobacklog bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 74/100
EchoTools/nevr-runtime#1471 ·
Los mantenedores suelen responder en 1 día
-
docs: Page not found?Abierto
Dificultad 1/5 Menos de una hora Aptitud para principiantes 66/100
Los mantenedores suelen responder en 2 días
-
bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
iamankushpandit/Gume#231 ·
Los mantenedores suelen responder en 1 día