make a nothrow call a throwing function
monarch_dodra
monarchdodra at gmail.com
Thu Feb 7 13:31:41 PST 2013
On Thursday, 7 February 2013 at 20:46:22 UTC, Maxim Fomin wrote:
> On Thursday, 7 February 2013 at 11:38:29 UTC, monarch_dodra
> wrote:
>> On Thursday, 7 February 2013 at 10:55:26 UTC, Jonathan M Davis
>> wrote:
>>> On Thursday, February 07, 2013 11:06:14 monarch_dodra wrote:
>>>> Any way to do that?
>>>
>>> You can cast the function.
>>>
>>> - Jonathan M Davis
>>
>> Smart.
>>
>> Unfortunatly, in this case, I'm trying to call "string.dup".
>>
>> It would appear though that (apparently), dup is a property
>> that returns a function pointer, or something. In any case, I
>> can't seem to be able to get its address.
>>
>> Now I feel kind of bad for suggesting banning taking the
>> address of a property function ...
>>
>> I can bypass this with a wrapper function I guess, but at this
>> point, I'd have to bench to see if that is even worth it...
>
> So, you want to call function (which throws) from function
> marked as nothrow? It seems to be breaking idea of what nothrow
> does.
>
> You can do this in general by casting (which is preferred way)
> and by exploiting current holes/misspecified tricks/corner
> language cases which should be in general avoided.
> Unfortunately, it appears that you cannot cast in your
> particular case of array duplication. However there are other
> ways to break nothrow and you can use them (declaration
> mismatch, unions, delegates). I think the problem is not
> absence of ways of doing what you want, but in limitation of
> casting with respect to some properties of built-in types.
>
> By the way, I would not say that dup array property cannot
> throw exceptions.
In this particular case, in is an string dup, so it *should* be
nothrow.
Still the final solution has is more problematic than anything,
so I'll just try/catch.
More information about the Digitalmars-d-learn
mailing list