The statement Holder<Animal> a(Animal());
does not create a variable, but declares a function that returns a Holder<Animal>
and that takes a function in parameter. It's usually called the most vexing parse, because of this ambiguity (that one would expect a variable rather than a function declaration).
Herb Sutter explains the different possible syntaxes here. In C++11, a possible solution is:
auto a = Holder<Animal> {};