Существует множество вопросов, касающихся этой проблемы, но ни один из них, похоже, не является решением моей проблемы. Я не думаю, что это действительно проблема Boost :: Variant; Я уверен, что я просто использую шаблоны неправильно. Я смог урезать код, чтобы вы могли скомпилировать его и увидеть проблему для себя, это довольно просто - я продолжаю получать ошибку «без вызова функции» от gcc, даже если она, кажется, прямо там. Я, вероятно, делаю что-то глупое, но не могу понять, что я делаю неправильно.
#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;
};