この問題に関しては多大な疑問がありますが、どれも問題の解決策ではないようです。私はこれが本当にBoost :: Variantの問題だとは思わない。私はちょうど間違った方法でテンプレートを使っていると確信しています。私はコードをコンパイルして自分自身で問題を見ることができるように、コードを削除することができました。かなり単純です。gccからエラーが表示されたままです。私はおそらく何か愚かなことをしているが、私が間違っていることを見ることができない。Boost :: Variant - "呼び出しに一致する関数がありません"
#include <boost/variant.hpp>
typedef boost::variant<int, std::string> Data;
struct A
{
template <typename T> T data() { return boost::get<T>(m_data); };
private:
Data m_data;
};
struct B
{
template <typename T> T data() { return m_a.data(); };
private:
A m_a;
};
int main (int argc, char *argv[])
{
return 0;
};
'm_a.data();'ではありませんか? –
Asha
このコードだけではコンパイラエラーは発生しません(少なくともVisual Studio 2010では、コンパイルエラーは発生しません)。エラーを表示するには、実際に 'B :: data'関数をどこかで呼び出すべきです。たとえば、 'main'に' B'の変数を追加し、 'data'を呼び出します。 –