|
Boost : |
From: Markus Schöpflin (markus.schoepflin_at_[hidden])
Date: 2002-04-26 03:33:30
I don't agree at all.
> Bjorn.Karlsson_at_[hidden] wrote:
>
> I think there are reasons:
>
> 0) Ease of use. With an explicit constructor, you couldn't do this:
>
> int main() {
>
> std::vector<boost::any> vec;
>
> vec.push_back(5);
> vec.push_back(std::string(", this works!"));
I did think implicit conversions are generally considered dangerous.
What is so bad if you have to write
vec.push_back(boost::any(5));
vec.push_back(boost::any(std::string(", this works!")));
instead?
> // Note that the following line uses the any_print class defined earlier
> std::cout << "Because of implicit conversion" << vec[1] << '\n';
This works because any_print can be implicitly constructed from any. Even an
explicit constructor for any allows this to work.
>
> return 0;
> }
>
> Weak argument? Perhaps.
>
> 1) Compiler deficiencies. I gave it a quick try on three compilers, and these were the results:
> * Compiler X didn't care about explicit for templated constructors...
So nothing changes for this compiler.
> * Compiler Y worked!
So something improves (IMHO) for this compiler.
> * Compiler Z understood the explicit part, but couldn't even pass a correctly constructed const any& to functions afterwards...
Could you give an example, please?
>
> Weak argument? Perhaps.
>
> Bjorn Karlsson
Markus
Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk