@@ -517,71 +517,10 @@ namespace detail
517
517
};
518
518
519
519
template <typename Class, typename Arg>
520
- class copy_constructor : public constructor_base <Class>
521
- {
522
- using my_base = constructor_base<Class>;
523
-
524
- public:
525
- using native_function_type =
526
- void (*)(Arg, void *);
527
-
528
- template <AS_NAMESPACE_QUALIFIER asECallConvTypes CallConv>
529
- requires (CallConv == AS_NAMESPACE_QUALIFIER asCALL_GENERIC ||
530
- CallConv == AS_NAMESPACE_QUALIFIER asCALL_CDECL_OBJLAST)
531
- using wrapper_type = std::conditional_t <
532
- CallConv == AS_NAMESPACE_QUALIFIER asCALL_GENERIC,
533
- AS_NAMESPACE_QUALIFIER asGENFUNC_t,
534
- native_function_type>;
535
-
536
- template <AS_NAMESPACE_QUALIFIER asECallConvTypes CallConv>
537
- static constexpr auto generate (call_conv_t <CallConv>) noexcept -> wrapper_type<CallConv>
538
- {
539
- if constexpr (CallConv == AS_NAMESPACE_QUALIFIER asCALL_GENERIC)
540
- {
541
- // if constexpr(Template)
542
- // {
543
- // return +[](AS_NAMESPACE_QUALIFIER asIScriptGeneric* gen) -> void
544
- // {
545
- // void* mem = gen->GetObject();
546
- // new(mem) Class(
547
- // *(AS_NAMESPACE_QUALIFIER asITypeInfo**)gen->GetAddressOfArg(0),
548
- // get_generic_arg<Arg>(
549
- // gen, 1
550
- // )
551
- // );
552
-
553
- // my_base::destroy_if_ex(static_cast<Class*>(mem));
554
- // };
555
- // }
556
- // else
557
- {
558
- return +[](AS_NAMESPACE_QUALIFIER asIScriptGeneric* gen) -> void
559
- {
560
- void * mem = gen->GetObject ();
561
- new (mem) Class (
562
- get_generic_arg<Arg>(
563
- gen, 0
564
- )
565
- );
566
-
567
- my_base::destroy_if_ex (static_cast <Class*>(mem));
568
- };
569
- }
570
- }
571
- else // CallConv == asCALL_CDECL_OBJLAST
572
- {
573
- return +[](Arg arg, void * mem) -> void
574
- {
575
- new (mem) Class (std::forward<Arg>(arg));
576
-
577
- my_base::destroy_if_ex (static_cast <Class*>(mem));
578
- };
579
- }
580
- }
581
- };
520
+ class arr_copy_constructor ;
582
521
583
522
template <typename ElemType, std::size_t Size, typename Arg>
584
- class copy_constructor <ElemType[Size], Arg> : public constructor_base<ElemType[Size]>
523
+ class arr_copy_constructor <ElemType[Size], Arg> : public constructor_base<ElemType[Size]>
585
524
{
586
525
using my_base = constructor_base<ElemType[Size]>;
587
526
@@ -4810,7 +4749,7 @@ class basic_value_class final : public class_register_helper_base<ForceGeneric>
4810
4749
{
4811
4750
if constexpr (std::is_array_v<Class>)
4812
4751
{
4813
- detail::copy_constructor <Class, const Class&> wrapper;
4752
+ detail::arr_copy_constructor <Class, const Class&> wrapper;
4814
4753
this ->behaviour_impl (
4815
4754
AS_NAMESPACE_QUALIFIER asBEHAVE_CONSTRUCT,
4816
4755
decl_copy_ctor ().c_str (),
@@ -4839,7 +4778,7 @@ class basic_value_class final : public class_register_helper_base<ForceGeneric>
4839
4778
{
4840
4779
if constexpr (std::is_array_v<Class>)
4841
4780
{
4842
- detail::copy_constructor <Class, const Class&> wrapper;
4781
+ detail::arr_copy_constructor <Class, const Class&> wrapper;
4843
4782
this ->behaviour_impl (
4844
4783
AS_NAMESPACE_QUALIFIER asBEHAVE_CONSTRUCT,
4845
4784
decl_copy_ctor ().c_str (),
0 commit comments