I have an overloaded function that can take either a std::string or a Local<Value>, however, when I pass in a const char *, expecting to have the std::string version selected, I instead get an ambiguity error. I added another version that takes a Local<Script> and that was added to the list of compatible overloaded functions for my call.
The constructor at http://v8.paulfryzel.com/docs/master/include_2v8_8h_source.html line 332: template <class S> 333 V8_INLINE Local(S* that) 334 : val_(that) {} 336 T* val_; is what's causing me headaches. As far as I can tell, it doesn't matter if T* and S* are convertible, because when the compiler is looking for implicit conversions, it doesn't care if the compiler could actually succeed, just that the types match up. This means that any function that takes a Local<ANYTHING> will be a viable implicit conversion overload match for any pointer type. Is this a desirable behavior? I believe this code shows a way to use SFINAE to stop this from happening: http://ideone.com/cvZOHt basically: template <class S, typename = std::enable_if_t<std::is_convertible<T*,S*>:: value>> V8_INLINE Local(S* that) : val_(that) {} V8_INLINE static Local<T> New(Isolate* isolate, T* that); T* val_; I believe std::is_convertible is the exact test as to whether : val_(that) will create a compilation error, but I don't know for sure. If this doesn't change any intended behavior, I'd love to see it merged in. Thank you. --Zac -- -- v8-dev mailing list [email protected] http://groups.google.com/group/v8-dev --- You received this message because you are subscribed to the Google Groups "v8-dev" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.
