0

次の無害な関数は、Solaris Studio 12.3 でコンパイルに失敗します。

#undef _RWSTD_NO_MEMBER_TEMPLATES
#include <fstream>
#include <string>
#define _RWSTD_NO_MEMBER_TEMPLATES
std::string FetchData(const std::string& fname)
    {
        std::ifstream fin(fname.c_str());
        std::string data;
        if (fin)
        {
            data = std::string((std::istreambuf_iterator<char>(fin)),
                std::istreambuf_iterator<char>());
        }
        return data;
    }

int main()
{
    return 0;
}

エラーメッセージで失敗します

std::string::basic_string(std::istreambuf_iterator<char, std::char_traits<char>>, std::istreambuf_iterator<char, std::char_traits<char>>)で必要な に一致するものが見つかりませんでし たOOTest::FetchData(const std::string &)

今、ファイルを確認したstd::stringところ、次のことがわかりました

#ifndef _RWSTD_NO_MEMBER_TEMPLATES
    template <class _InputIterator>
    basic_string (_InputIterator, _InputIterator, const _Allocator& _RWSTD_DEFAULT_ARG(_Allocator()));

std::stringだから、オーバーロードの宣言があると思います

template< class InputIt >
basic_string( InputIt first, InputIt last, 
              const Allocator& alloc = Allocator() );

どれが合っていたはず

template< class InputIt >
basic_string( InputIt first, InputIt last, 
              const Allocator& alloc = Allocator() );

しかし、残念ながらそうではありませんでした。

だから私は2つの質問があります

  1. std::istreambuf_iterator<char>私のコンストラクション ビアが一致しないのはなぜですか?
  2. このマクロ_RWSTD_NO_MEMBER_TEMPLATESの目的は何ですか?

ノート

  1. コメントをもとに実行してプリプロセッサ出力を生成しようとしたCC -E test.cpp > pre.outところ、イテレータ版が生成されていませんでした。だから私は定義を解除しようとしまし_RWSTD_NO_MEMBER_TEMPLATESたが、それは役に立ちませんでした。

POM から直接実行する方法はわかりませんが、いつでも Java メイン クラスを作成し、 pom を読み取り、必要な依存関係を追加し、すべての詳細を含む新しい POM ファイルを出力できます。

バージョンの詳細を取得するには、rest API を使用します。 http://search.maven.org/#api

http://search.maven.org/#search|gav|1|g :"com.google.inject"%20AND%20a:"guice"

groupId「com.google.inject」およびartifactId「guice」のすべてのバージョンのリンクをクリックすることを模倣します。アーティファクトのすべてのバージョンのソートされたリストを返します。

4

0 に答える 0