Preguntas etiquetadas con incomplete-type

6
std :: unique_ptr con un tipo incompleto no se compilará
Estoy usando el pimpl-idiom con std::unique_ptr: class window { window(const rectangle& rect); private: class window_impl; // defined elsewhere std::unique_ptr<window_impl> impl_; // won't compile }; Sin embargo, recibo un error de compilación con respecto al uso de un tipo incompleto, en la línea 304 en <memory>: Aplicación no válida de ' …

1
¿Es correcto Clang para rechazar el código en el que la clase anidada de una plantilla de clase se define solo a través de especializaciones?
Dada la siguiente plantilla de clase: template<typename T> struct Outer { struct Inner; auto f(Inner) -> void; }; Definimos Innerpor separado para cada especialización de Outer: template<> struct Outer<int>::Inner {}; template<> struct Outer<double>::Inner {}; y luego defina la función miembro funa vez para todas las especializaciones de Outer: auto Outer<T>::f(Inner) …

2
¿T tiene que ser un tipo completo para ser usado en `std :: declval <T>`?
Considere este ejemplo (viniendo de aquí ): #include &lt;type_traits&gt; #include &lt;iostream&gt; template &lt;typename U&gt; struct A { }; struct B { template &lt;typename F = int&gt; A&lt;F&gt; f() { return A&lt;F&gt;{}; } using default_return_type = decltype(std::declval&lt;B&gt;().f()); }; int main() { B::default_return_type x{}; std::cout &lt;&lt; std::is_same&lt; B::default_return_type, A&lt;int&gt;&gt;::value; } Se compila …


1
¿Puede un compilador colocar la implementación de un destructor virtual declarado implícitamente en una sola unidad de traducción separada?
El siguiente código compila y enlaza con Visual Studio(tanto 2017 como 2019 con /permissive-), pero no compila con ninguno gcco clang. foo.h #include &lt;memory&gt; struct Base { virtual ~Base() = default; // (1) }; struct Foo : public Base { Foo(); // (2) struct Bar; std::unique_ptr&lt;Bar&gt; bar_; }; foo.cpp #include …
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.