Re: Why internal linkage variables can't be used to instantialize an template?
In article <1174910088.404206.256330@l75g2000hse.googlegroups.com>,
James Kanze <james.kanze@gmail.com> wrote:
Of course, In this particular case, there is a simple and
elegant work-around: put i2 in an anonymous namespace, rather
than declaring it static. It is generally recommended to avoid
static at namespace scope anyway. The problem shows up,
however, with locals, and in particular, local types.
Deep local types can be interesting:) but it seems that they
can be declared in a struct/class containing only the definitions
and no instances. Proper naming of these structs solves the problem
even of multiply declared local types in different scopes. Just give
each scope originally containing the local definition a new struct and
instance the proper type in the function.
namespace
{
struct X
{
class A{};
};
struct Y
{
struct A{ int *begin(); int *end(); };
};
struct what_have_you
{
void operator () (int) {}
};
}
void foo()
{
X::A a;
for(int i=0;i!=10;++i)
{
Y::A a;
std::for_each(a.begin(),a.end(),what_have_you());
}
// a is an X::A here
}
done each A has external linkage, and so the template args
are legal.
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]