Adrian Hawryluk wrote:
I'm implementing an algorithm that will fill a container with the same
item. However, my object creation function isn't working correctly.
This should auto detect the types based on the parameters it was
passed. But I must be missing something as it will not compile.
template<typename dest_t, typename src_t>
inline fill<dest_t, src_t> make_fill(dest_t& dest, src_t& src) //< error
{
return fill<dest_t, src_t>(src);
}
../arrayTest1.h:68: error: expected init-declarator before '<' token
../arrayTest1.h:68: error: expected `;' before '<' token
Thanks in advance.
Adrian
I don't get it. Under VC++ 6.0 it works (and that doesn't accept a
whole lot ;) lol jk) but g++ 3.4.4 (cygming special, gdc 0.12, using dmd
0.125), it chokes. Here is my test code that I transfered between the
two compilers. Nothing else in the file but this, so the only thing
that would go wrong is a link error because there is no main() function.
--------------------------------------------------------------------------
#include <vector>
#include <algorithm>
using namespace std;
template <typename dest_t, typename src_t>
class fill
{
src_t const & value;
public:
fill(src_t const & value)
: value(value) {}
void operator()(dest_t& dest)
{
}
};
template<typename dest_t, typename src_t>
inline fill<dest_t, src_t const> make_fill(dest_t& dest, src_t& src)
{
return fill<dest_t, src_t const>(src);
}
int main2(int argc, char* argv[])
{
vector<int> aa;
aa.push_back(3);
aa.push_back(5);
int b = 3;
for_each(aa.begin(), aa.end(), make_fill(*aa.begin(), b));
return 0;
}
--------------------------------------------------------------------------