Boost logo

Boost :

Subject: [boost] Need help with workaround for MSVC bug
From: Emil Dotchevski (emil_at_[hidden])
Date: 2009-09-17 16:42:50


On MSVC, the following correct code produces error C2896: 'void
operator ||(T,void (__cdecl *)(tag<X>))' : cannot use function
template 'void bar(tag<X>)' as a function argument.

struct foo { };

template <int X>
struct tag { };

template <int X>
void bar( tag<X> ) { }

template <class T,int X>
void operator||(T, void(*)(tag<X>)) { }

int main()
{
  foo()||bar<1>;
}

My goal is to have an operator|| overload that deduces tag<X>
implicitly, but without using parenthesis, that is, foo()||bar<1>()
wouldn't be satisfactory. Doesn't seem possible, but still I decided
to ask. Any ideas?

Emil Dotchevski
Reverge Studios, Inc.
http://www.revergestudios.com/reblog/index.php?n=ReCode


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk