@@ -450,17 +450,10 @@ namespace etl
450
450
template <typename ... TArgs>
451
451
reference create (TArgs&&... args) ETL_NOEXCEPT_EXPR(ETL_NOT_USING_EXCEPTIONS)
452
452
{
453
- if (has_value ())
454
- {
455
- storage.value = T (args...);
456
- }
457
- else
458
- {
459
- valid = true ;
460
- ::new (&storage.value ) value_type (etl::forward<TArgs>(args)...);
461
- }
462
-
463
- return storage.value ;
453
+ ETL_ASSERT (!has_value (), ETL_ERROR (etl::typed_storage_error));
454
+ pointer p = ::new (&storage.value ) value_type (etl::forward<TArgs>(args)...);
455
+ valid = true ;
456
+ return *p;
464
457
}
465
458
#else
466
459
// ***************************************************************************
@@ -470,17 +463,10 @@ namespace etl
470
463
template <typename T1>
471
464
reference create (const T1& t1)
472
465
{
473
- if (has_value ())
474
- {
475
- storage.value = T (t1);
476
- }
477
- else
478
- {
479
- valid = true ;
480
- ::new (&storage.value ) value_type (t1);
481
- }
482
-
483
- return storage.value ;
466
+ ETL_ASSERT (!has_value (), ETL_ERROR (etl::typed_storage_error));
467
+ pointer p = ::new (&storage.value ) value_type (t1);
468
+ valid = true ;
469
+ return *p;
484
470
}
485
471
486
472
// ***************************************************************************
@@ -490,17 +476,10 @@ namespace etl
490
476
template <typename T1, typename T2>
491
477
reference create (const T1& t1, const T2& t2)
492
478
{
493
- if (has_value ())
494
- {
495
- storage.value = T (t1, t2);
496
- }
497
- else
498
- {
499
- valid = true ;
500
- ::new (&storage.value ) value_type (t1, t2);
501
- }
502
-
503
- return storage.value ;
479
+ ETL_ASSERT (!has_value (), ETL_ERROR (etl::typed_storage_error));
480
+ pointer p = ::new (&storage.value ) value_type (t1, t2);
481
+ valid = true ;
482
+ return *p;
504
483
}
505
484
506
485
// ***************************************************************************
@@ -510,17 +489,10 @@ namespace etl
510
489
template <typename T1, typename T2, typename T3>
511
490
reference create (const T1& t1, const T2& t2, const T3& t3)
512
491
{
513
- if (has_value ())
514
- {
515
- storage.value = T (t1, t2, t3);
516
- }
517
- else
518
- {
519
- valid = true ;
520
- ::new (&storage.value ) value_type (t1, t2, t3);
521
- }
522
-
523
- return storage.value ;
492
+ ETL_ASSERT (!has_value (), ETL_ERROR (etl::typed_storage_error));
493
+ pointer p = ::new (&storage.value ) value_type (t1, t2, t3);
494
+ valid = true ;
495
+ return *p;
524
496
}
525
497
526
498
// ***************************************************************************
@@ -530,17 +502,10 @@ namespace etl
530
502
template <typename T1, typename T2, typename T3, typename T4>
531
503
reference create (const T1& t1, const T2& t2, const T3& t3, const T4& t4)
532
504
{
533
- if (has_value ())
534
- {
535
- storage.value = T (t1, t2, t3, t4);
536
- }
537
- else
538
- {
539
- valid = true ;
540
- ::new (&storage.value ) value_type (t1, t2, t3, t4);
541
- }
542
-
543
- return storage.value ;
505
+ ETL_ASSERT (!has_value (), ETL_ERROR (etl::typed_storage_error));
506
+ pointer p = ::new (&storage.value ) value_type (t1, t2, t3, t4);
507
+ valid = true ;
508
+ return *p;
544
509
}
545
510
#endif
546
511
@@ -750,8 +715,9 @@ namespace etl
750
715
reference create (TArgs&&... args) ETL_NOEXCEPT_EXPR(ETL_NOT_USING_EXCEPTIONS)
751
716
{
752
717
ETL_ASSERT (!has_value (), ETL_ERROR (etl::typed_storage_error));
718
+ pointer p = ::new (pbuffer) value_type (etl::forward<TArgs>(args)...);
753
719
valid = true ;
754
- return *:: new (pbuffer) value_type (etl::forward<TArgs>(args)...) ;
720
+ return *p ;
755
721
}
756
722
#else
757
723
// ***************************************************************************
@@ -762,8 +728,9 @@ namespace etl
762
728
reference create (const T1& t1)
763
729
{
764
730
ETL_ASSERT (!has_value (), ETL_ERROR (etl::typed_storage_error));
731
+ pointer p = ::new (pbuffer) value_type (t1);
765
732
valid = true ;
766
- return *:: new (pbuffer) value_type (t1) ;
733
+ return *p ;
767
734
}
768
735
769
736
// ***************************************************************************
@@ -774,8 +741,9 @@ namespace etl
774
741
reference create (const T1& t1, const T2& t2)
775
742
{
776
743
ETL_ASSERT (!has_value (), ETL_ERROR (etl::typed_storage_error));
744
+ pointer p = ::new (pbuffer) value_type (t1, t2);
777
745
valid = true ;
778
- return *:: new (pbuffer) value_type (t1, t2) ;
746
+ return *p ;
779
747
}
780
748
781
749
// ***************************************************************************
@@ -786,8 +754,9 @@ namespace etl
786
754
reference create (const T1& t1, const T2& t2, const T3& t3)
787
755
{
788
756
ETL_ASSERT (!has_value (), ETL_ERROR (etl::typed_storage_error));
757
+ pointer p = ::new (pbuffer) value_type (t1, t2, t3);
789
758
valid = true ;
790
- return *:: new (pbuffer) value_type (t1, t2, t3) ;
759
+ return *p ;
791
760
}
792
761
793
762
// ***************************************************************************
@@ -798,8 +767,9 @@ namespace etl
798
767
reference create (const T1& t1, const T2& t2, const T3& t3, const T4& t4)
799
768
{
800
769
ETL_ASSERT (!has_value (), ETL_ERROR (etl::typed_storage_error));
770
+ pointer p = ::new (pbuffer) value_type (t1, t2, t3, t4);
801
771
valid = true ;
802
- return *:: new (pbuffer) value_type (t1, t2, t3, t4) ;
772
+ return *p ;
803
773
}
804
774
#endif
805
775
0 commit comments