5

http://cpp-netlib.orgを使用しようとしましたが、コンパイルに失敗しました。これは、そのヘッダーの 1 つに次のものが含まれているためです。

namespace network {
    namespace utils {
        struct thread_pool;
    }
}

そして別の:

namespace network {
        namespace utils {
            typedef ::network::concurrency::thread_pool thread_pool;
    }
}

C++ での typedef の前方宣言http://www.cplusplus.com/forum/beginner/75561 C++から私が理解していることから、これは基本的に違法です。「struct A;」と前方宣言することはできません。そして、「typedef XA;」を試みます。

それで、私の質問は、一体何がこれをコンパイルして、それを可能にするのでしょうか? これは C++11 の新しい機能ですか?彼らは C++11 の最新の最高のものを使用すると主張していますか?

4

1 に答える 1

4

これは基本的に違法です

はい、そうです。

それで、私の質問は、一体何がこれをコンパイルして、それを可能にするのでしょうか?

おそらく、同じ翻訳単位に両方のヘッダーが含まれることはありません。その場合、ほとんどのコンパイラはエラーを診断できません (診断する必要はありません)。そして、まだ機能するプログラムで終わる可能性があります。ただし、あなたは間違いなく未定義の動作の世界にいます。

これは C++11 の新しい機能ですか?

usingいいえ。エイリアスを作成するために、さまざまな興味深いことができます。ただし、型をクラスと の両方として宣言することはできませんtypedef

于 2013-09-27T15:06:00.643 に答える