Questions tagged «incomplete-type»

6
类型不完整的std :: unique_ptr无法编译
我在使用pimpl惯用语std::unique_ptr: class window { window(const rectangle& rect); private: class window_impl; // defined elsewhere std::unique_ptr<window_impl> impl_; // won't compile }; 但是,我在第304行中遇到了有关使用不完整类型的编译错误<memory>: 无效的将' sizeof'应用于不完整的类型' uixx::window::window_impl' 据我所知,std::unique_ptr应该可以使用不完整的类型。这是libc ++中的错误,还是我在这里做错了?

1
Clang是否正确拒绝仅通过专门化定义类模板的嵌套类的代码?
给定以下类模板: template<typename T> struct Outer { struct Inner; auto f(Inner) -> void; }; 我们Inner为以下每种专业分别定义Outer: template<> struct Outer<int>::Inner {}; template<> struct Outer<double>::Inner {}; 然后f针对以下所有专业定义一次成员函数Outer: auto Outer<T>::f(Inner) -> void { } 但是Clang(9.0.0)抱怨: error: variable has incomplete type 'Outer::Inner' auto Outer<T>::f(Inner) -> void ^ 我们还可以通过提供Inner以下所有其他专长的定义来规避编译器错误Outer: template<typename T> struct Outer<T>::Inner {}; 或通过f为每个专业分别定义: template<> auto …

2
T是否必须是要在`std :: declval <T>`中使用的完整类型?
考虑以下示例(来自此处): #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; } 它在gcc9.2上编译时没有错误,但gcc7.2和clang 10.0.0抱怨B未完成。lang的错误是: prog.cc:11:58: error: member access into incomplete …

1
指向不完整类型的指针可以不完整吗?
可以int (*)[]是不完整的类型吗? C 2018 6.2.5 1说: 在翻译单元内的各个点上,对象类型可能不完整(缺少足够的信息来确定该类型对象的大小)或完整(具有足够的信息)。 因此,似乎如果类型的大小已知,则该类型是完整的。6.2.6.1 28指定某些类型的指针必须具有相同的大小(指向void和的字符,指向兼容类型的指针,指向结构的指针以及指向联合的指针),但是指向其他类型的指针可能会有所不同。 在C实现中,所有指针或指向数组的所有指针 int都具有相同的大小,则int (*)[]已知的大小,因此将是完整的。例如,在对大型数组使用不同指针的实现中,大小是未知的,因此不完整。 作为MM指出,一个结构必须不包含不完全型的成员,在6.7.2.1 3.这表明与指针中的一个尺寸的实现必须接受除最终柔性阵列构件,每一个约束struct { int (*p)[]; }而一实现具有不同此类数组的大小必须诊断出约束违例。(这反过来意味着这样的声明不是严格符合C的一部分。)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.