Perguntas com a marcação «incomplete-type»

6
std :: unique_ptr com um tipo incompleto não será compilado
Estou usando o pimpl-idiom com std::unique_ptr: class window { window(const rectangle& rect); private: class window_impl; // defined elsewhere std::unique_ptr<window_impl> impl_; // won't compile }; No entanto, recebo um erro de compilação sobre o uso de um tipo incompleto, na linha 304 em <memory>: Aplicativo inválido de ' sizeof' para um …

1
Clang está correto ao rejeitar o código no qual a classe aninhada de um modelo de classe é definida apenas por meio de especializações?
Dado o seguinte modelo de classe: template<typename T> struct Outer { struct Inner; auto f(Inner) -> void; }; definimos Innerseparadamente para cada especialização de Outer: template<> struct Outer<int>::Inner {}; template<> struct Outer<double>::Inner {}; e defina a função de membro fuma vez para todas as especializações de Outer: auto Outer<T>::f(Inner) -> …

2
T precisa ser um tipo completo para ser usado em `std :: declval <T>`?
Considere este exemplo (vindo daqui ): #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; } Ele é compilado …


1
Um compilador pode colocar a implementação de um destruidor virtual declarado implicitamente em uma única unidade de tradução separada?
O código a seguir compila e vincula com Visual Studio(2017 e 2019 com /permissive-), mas não compila com gccou 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 "foo.h" …
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.