
Bronek Kozicki <brok@rubikon.pl> writes:
I wonder if that was discussed at the time? Or is there a better way to prevent the problem?
I remember thread "Perfect Forwarding" where David presented clever way to detect copy-from--temporary-rvalue, but I do not know if any of his ideas are applicable here. It would be sooo much cleaner just to add constructor like:
template <typename Container> tokenizer(const Container&& c, const TokenizerFunc& f); // make a copy
Actually, if that's the way tokenizer works, you can do it, I'm pretty sure: --- #include <vector> #include <iostream> template <class TokenizerFunc> struct tokenizer { struct rvalue { template <class T> rvalue(T const&) {} }; // handle lvalues template <typename Container> explicit tokenizer(Container& c, const TokenizerFunc& f = TokenizerFunc()) { std::cout << "lvalue\n"; } // handle rvalues explicit tokenizer(rvalue const& rval, const TokenizerFunc& f = TokenizerFunc()) { std::cout << "rvalue\n"; } }; int main() { std::vector<int> const x; tokenizer<int> z((x)); tokenizer<int> z2((std::vector<int>())); } -- Dave Abrahams Boost Consulting www.boost-consulting.com