コンパイルエラーを取りたい
初質問で記述で抜け漏れがあれば、合わせてご指摘ください。
C++の規格原案のコード断片をコンパイルしています。
規格の理解のためと、いろいろな条件のコンパイルエラーとその対応方法について、広く記録することによって、いつか同じエラーに遭遇した時にやくに立つことを目指しています。
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n741.pdf
の
8.5.1.9 Static cast [expr.static.cast]
のコード断片を
p105.cpp
という名前のファイルとしてclang++, g++でコンパイルしています。
エラーメッセージ
エラーメッセージ p105.cpp: At global scope: p105.cpp:27:1: error: 'T' does not name a type T* p1 = new T;
p105.cpp
c++
1// C++N4741 Committee Draft, Standard for Programming Language C++ 2// http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2017/n741.pdf 3const char* msg= "C++N4741(50)8.5.1.9 Static cast [expr.static.cast]p105.cpp"; 4// Edited by Dr. Ogawa Kiyoshi. Compile procedure and results record. 5 6#include <iostream> 7#include <cstdlib> 8 9using namespace std; 10 11struct B { }; 12struct D : public B { }; 13D d; 14B &br = d; 15static_cast<D&>(br); // produces lvalue to the original d object 16 17struct B { }; 18struct D : private B { }; 19void f() { 20static_cast<D*>((B*)0); // error: B is a private base of D 21static_cast<int B::*>((int D::*)0); // error: B is a private base of D 22} 23 24T* p1 = new T; 25const T* p2 = static_cast<const T*>(static_cast<void*>(p1)); 26bool b = p1 == p2; // b will have the value true. 27 28int main() { 29 30 cout<< msg << endl; 31 return EXIT_SUCCESS; 32}
試していること
「does not name a type」でネット検索して
項目を記録し、対応方法を整理しています。
https://qiita.com/kaizen_nagoya/items/acb9f1a9b5aad6df06bd
ぴったりした解決方法が整理できていません。
また、Tに関する宣言の類を規格原案の文書中で探して、
切り貼りしてコンパイルをしています。
なかなかコンパイルエラーが取れません。
https://stackoverflow.com
https://cpprefjp.github.io
http://ja.cppreference.com
の記述を拝見しながら、宣言文を切り貼りしては、コンパイルして見ています。
時々、コンパイルエラーがどっと増えてめげています。
よろしくお願いします。
道具の版
clang++ --version clang version 6.0.0 (tags/RELEASE_600/final) Target: x86_64-apple-darwin17.4.0 g++-7 --version g++-7 (Homebrew GCC 7.3.0_1) 7.3.0
コンパイルオプションは主に、 -std=c++2a -Wall です。

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/05/17 01:10