Question

So, I create a header file that has the following:

namespace A
{

template<int a>
void foo(...)
{
    //This throws a "test was not declared in this scope" error:
    boost::function< bool (int, int)> t = test<a>; 
}

template<int a>
bool test(int c, int d)
{
    //Do stuff;
}
}

However, the error is thrown on compilation, and I don't know why. test is obviously in scope.

replacing test<a> with boost:ref(test<a>) or &test<a> still doesn't work.

Any ideas?

Was it helpful?

Solution

You need to atleast declare something before you can use it. The compiler doesn't know it actually exists before that.

namespace A
{

template<int a>
bool test(int c, int d);

template<int a>
void foo(...)
{
    //This throws a "test was not declared in this scope" error:
    boost::function< bool (int, int)> t = test<a>; 
}

template<int a>
bool test(int c, int d)
{
    //Do stuff;
}
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top