I submitted a code review here: 

https://codereview.chromium.org/1647833005

On Thursday, January 28, 2016 at 12:47:03 AM UTC-8, Jochen Eisinger wrote:
>
> Hey,
>
> thanks for looking into this. I guess the reason this hasn't come up 
> before is that our styleguide explicitly disallows function overloading (
> https://google.github.io/styleguide/cppguide.html#Function_Overloading)
>
> However, I think it's reasonable to support other styles here as well. 
> Have you considered contributing a patch?
>
> best
> -jochen
>
> On Thu, Jan 28, 2016 at 2:28 AM <[email protected] <javascript:>> wrote:
>
>> or perhaps the template on the constructor isn't even necessary?   
>>
>> http://ideone.com/MXwvp9
>>
>> shows the same behavior.
>>
>> V8_INLINE Local(T* that)
>>  : val_(that) {}
>> V8_INLINE static Local<T> New(Isolate* isolate, T* that);
>> T* val_;
>>
>> On Wednesday, January 27, 2016 at 5:16:54 PM UTC-8, [email protected] 
>> wrote:
>>>
>>> I think I simply had the parameters to is_convertible backwards in my 
>>> first post:
>>>
>>> template <class S, typename = std::enable_if_t<std::is_convertible<S*,T*
>>> >::value>>
>>> V8_INLINE Local(S* that)
>>>  : val_(that) {}
>>> V8_INLINE static Local<T> New(Isolate* isolate, T* that);
>>> T* val_;
>>>
>>>
>>> This link http://ideone.com/RVL4rD shows overloaded functions being 
>>> selected appropriately as well as pointer assignment working between 
>>> compatible types.
>>>
>>> On Wednesday, January 27, 2016 at 5:03:49 PM UTC-8, [email protected] 
>>> wrote:
>>>>
>>>> is_convertible doesn't seem to be the right test.   I'm trying to 
>>>> figure out if I can find a better one.
>>>>
>>>> On Wednesday, January 27, 2016 at 4:48:56 PM UTC-8, [email protected] 
>>>> wrote:
>>>>>
>>>>> 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] <javascript:>
>> 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] <javascript:>.
>> For more options, visit https://groups.google.com/d/optout.
>>
>

-- 
-- 
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.

Reply via email to