View | Details | Raw Unified | Return to bug 2658
Collapse All | Expand All

(-)a/src/core/model/traced-value.h (-61 / +61 lines)
 Lines 150-156   public: Link Here 
150
   */
150
   */
151
  template <typename U>
151
  template <typename U>
152
  TracedValue (const TracedValue<U> &other)
152
  TracedValue (const TracedValue<U> &other)
153
    : m_v (other.m_v)
153
    : m_v (other.Get ())
154
  {}
154
  {}
155
  /**
155
  /**
156
   * Copy from a variable type compatible with this underlying type.
156
   * Copy from a variable type compatible with this underlying type.
 Lines 441-632   bool operator > (const U &lhs, const TracedValue<T> &rhs) Link Here 
441
 *     the underlying values.
441
 *     the underlying values.
442
 */
442
 */
443
template <typename T, typename U>
443
template <typename T, typename U>
444
TracedValue<T> operator + (const TracedValue<T> &lhs, const TracedValue<U> &rhs) {
444
auto operator + (const TracedValue<T> &lhs, const TracedValue<U> &rhs) -> TracedValue<decltype(lhs.Get() + rhs.Get())> {
445
  TRACED_VALUE_DEBUG ("x+x");
445
  TRACED_VALUE_DEBUG ("x+x");
446
  return TracedValue<T> (lhs.Get () + rhs.Get ());
446
  return TracedValue<decltype(lhs.Get() + rhs.Get())>(lhs.Get () + rhs.Get ());
447
}
447
}
448
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
448
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
449
template <typename T, typename U>
449
template <typename T, typename U>
450
TracedValue<T> operator + (const TracedValue<T> &lhs, const U &rhs) {
450
auto operator + (const TracedValue<T> &lhs, const U &rhs) -> TracedValue<decltype(lhs.Get() + rhs)> {
451
  TRACED_VALUE_DEBUG ("x+");
451
  TRACED_VALUE_DEBUG ("x+");
452
  return TracedValue<T> (lhs.Get () + rhs);
452
  return TracedValue<decltype(lhs.Get() + rhs)>(lhs.Get () + rhs);
453
}
453
}
454
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
454
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
455
template <typename T, typename U>
455
template <typename T, typename U>
456
TracedValue<T> operator + (const U &lhs, const TracedValue<T> &rhs) {
456
auto operator + (const U &lhs, const TracedValue<T> &rhs) -> TracedValue<decltype(lhs + rhs.Get())> {
457
  TRACED_VALUE_DEBUG ("+x");
457
  TRACED_VALUE_DEBUG ("+x");
458
  return TracedValue<T> (lhs + rhs.Get ());
458
  return TracedValue<decltype(lhs + rhs.Get())>(lhs + rhs.Get ());
459
}
459
}
460
460
461
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
461
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
462
template <typename T, typename U>
462
template <typename T, typename U>
463
TracedValue<T> operator - (const TracedValue<T> &lhs, const TracedValue<U> &rhs) {
463
auto operator - (const TracedValue<T> &lhs, const TracedValue<U> &rhs) -> TracedValue<decltype(lhs.Get() - rhs.Get())> {
464
  TRACED_VALUE_DEBUG ("x-x");
464
  TRACED_VALUE_DEBUG ("x-x");
465
  return TracedValue<T> (lhs.Get () - rhs.Get ());
465
  return TracedValue<decltype(lhs.Get() - rhs.Get())>(lhs.Get () - rhs.Get ());
466
}
466
}
467
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
467
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
468
template <typename T, typename U>
468
template <typename T, typename U>
469
TracedValue<T> operator - (const TracedValue<T> &lhs, const U &rhs) {
469
auto operator - (const TracedValue<T> &lhs, const U &rhs) -> TracedValue<decltype(lhs.Get() - rhs)> {
470
  TRACED_VALUE_DEBUG ("x-");
470
  TRACED_VALUE_DEBUG ("x-");
471
  return TracedValue<T> (lhs.Get () - rhs);
471
  return TracedValue<decltype(lhs.Get() - rhs)>(lhs.Get () - rhs);
472
}
472
}
473
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
473
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
474
template <typename T, typename U>
474
template <typename T, typename U>
475
TracedValue<T> operator - (const U &lhs, const TracedValue<T> &rhs) {
475
auto operator - (const U &lhs, const TracedValue<T> &rhs) -> TracedValue<decltype(lhs - rhs.Get())> {
476
  TRACED_VALUE_DEBUG ("-x");
476
  TRACED_VALUE_DEBUG ("-x");
477
  return TracedValue<T> (lhs - rhs.Get ());
477
  return TracedValue<decltype(lhs - rhs.Get())>(lhs - rhs.Get ());
478
}
478
}
479
479
480
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
480
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
481
template <typename T, typename U>
481
template <typename T, typename U>
482
TracedValue<T> operator * (const TracedValue<T> &lhs, const TracedValue<U> &rhs) {
482
auto operator * (const TracedValue<T> &lhs, const TracedValue<U> &rhs) -> TracedValue<decltype(lhs.Get() * rhs.Get())> {
483
  TRACED_VALUE_DEBUG ("x*x");
483
  TRACED_VALUE_DEBUG ("x*x");
484
  return TracedValue<T> (lhs.Get () * rhs.Get ());
484
  return TracedValue<decltype(lhs.Get() * rhs.Get())>(lhs.Get () * rhs.Get ());
485
}
485
}
486
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
486
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
487
template <typename T, typename U>
487
template <typename T, typename U>
488
TracedValue<T> operator * (const TracedValue<T> &lhs, const U &rhs) {
488
auto operator * (const TracedValue<T> &lhs, const U &rhs) -> TracedValue<decltype(lhs.Get() * rhs)> {
489
  TRACED_VALUE_DEBUG ("x*");
489
  TRACED_VALUE_DEBUG ("x*");
490
  return TracedValue<T> (lhs.Get () * rhs);
490
  return TracedValue<decltype(lhs.Get() * rhs)>(lhs.Get () * rhs);
491
}
491
}
492
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
492
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
493
template <typename T, typename U>
493
template <typename T, typename U>
494
TracedValue<T> operator * (const U &lhs, const TracedValue<T> &rhs) {
494
auto operator * (const U &lhs, const TracedValue<T> &rhs) -> TracedValue<decltype(lhs + rhs.Get())> {
495
  TRACED_VALUE_DEBUG ("*x");
495
  TRACED_VALUE_DEBUG ("*x");
496
  return TracedValue<T> (lhs * rhs.Get ());
496
  return TracedValue<decltype(lhs + rhs.Get())>(lhs * rhs.Get ());
497
}
497
}
498
498
499
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
499
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
500
template <typename T, typename U>
500
template <typename T, typename U>
501
TracedValue<T> operator / (const TracedValue<T> &lhs, const TracedValue<U> &rhs) {
501
auto operator / (const TracedValue<T> &lhs, const TracedValue<U> &rhs) -> TracedValue<decltype(lhs.Get() / rhs.Get())> {
502
  TRACED_VALUE_DEBUG ("x/x");
502
  TRACED_VALUE_DEBUG ("x/x");
503
  return TracedValue<T> (lhs.Get () / rhs.Get ());
503
  return TracedValue<decltype(lhs.Get() / rhs.Get())>(lhs.Get () / rhs.Get ());
504
}
504
}
505
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
505
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
506
template <typename T, typename U>
506
template <typename T, typename U>
507
TracedValue<T> operator / (const TracedValue<T> &lhs, const U &rhs) {
507
auto operator / (const TracedValue<T> &lhs, const U &rhs) -> TracedValue<decltype(lhs.Get() / rhs)> {
508
  TRACED_VALUE_DEBUG ("x/");
508
  TRACED_VALUE_DEBUG ("x/");
509
  return TracedValue<T> (lhs.Get () / rhs);
509
  return TracedValue<decltype(lhs.Get() / rhs)>(lhs.Get () / rhs);
510
}
510
}
511
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
511
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
512
template <typename T, typename U>
512
template <typename T, typename U>
513
TracedValue<T> operator / (const U &lhs, const TracedValue<T> &rhs) {
513
auto operator / (const U &lhs, const TracedValue<T> &rhs) -> TracedValue<decltype(lhs / rhs.Get())> {
514
  TRACED_VALUE_DEBUG ("/x");
514
  TRACED_VALUE_DEBUG ("/x");
515
  return TracedValue<T> (lhs / rhs.Get ());
515
  return TracedValue<decltype(lhs / rhs.Get())>(lhs / rhs.Get ());
516
}
516
}
517
517
518
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
518
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
519
template <typename T, typename U>
519
template <typename T, typename U>
520
TracedValue<T> operator % (const TracedValue<T> &lhs, const TracedValue<U> &rhs) {
520
auto operator % (const TracedValue<T> &lhs, const TracedValue<U> &rhs) -> TracedValue<decltype(lhs.Get() % rhs.Get())> {
521
  TRACED_VALUE_DEBUG ("x%x");
521
  TRACED_VALUE_DEBUG ("x%x");
522
  return TracedValue<T> (lhs.Get () % rhs.Get ());
522
  return TracedValue<decltype(lhs.Get() % rhs.Get())>(lhs.Get () % rhs.Get ());
523
}
523
}
524
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
524
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
525
template <typename T, typename U>
525
template <typename T, typename U>
526
TracedValue<T> operator % (const TracedValue<T> &lhs, const U &rhs) {
526
auto operator % (const TracedValue<T> &lhs, const U &rhs) -> TracedValue<decltype(lhs.Get() % rhs)> {
527
  TRACED_VALUE_DEBUG ("x%");
527
  TRACED_VALUE_DEBUG ("x%");
528
  return TracedValue<T> (lhs.Get () % rhs);
528
  return TracedValue<decltype(lhs.Get() % rhs)>(lhs.Get () % rhs);
529
}
529
}
530
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
530
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
531
template <typename T, typename U>
531
template <typename T, typename U>
532
TracedValue<T> operator % (const U &lhs, const TracedValue<T> &rhs) {
532
auto operator % (const U &lhs, const TracedValue<T> &rhs) -> TracedValue<decltype(lhs % rhs.Get())> {
533
  TRACED_VALUE_DEBUG ("%x");
533
  TRACED_VALUE_DEBUG ("%x");
534
  return TracedValue<T> (lhs % rhs.Get ());
534
  return TracedValue<decltype(lhs % rhs.Get())>(lhs % rhs.Get ());
535
}
535
}
536
536
537
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
537
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
538
template <typename T, typename U>
538
template <typename T, typename U>
539
TracedValue<T> operator ^ (const TracedValue<T> &lhs, const TracedValue<U> &rhs) {
539
auto operator ^ (const TracedValue<T> &lhs, const TracedValue<U> &rhs) -> TracedValue<decltype(lhs.Get() ^ rhs.Get())> {
540
  TRACED_VALUE_DEBUG ("x^x");
540
  TRACED_VALUE_DEBUG ("x^x");
541
  return TracedValue<T> (lhs.Get () ^ rhs.Get ());
541
  return TracedValue<decltype(lhs.Get() ^ rhs.Get())>(lhs.Get () ^ rhs.Get ());
542
}
542
}
543
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
543
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
544
template <typename T, typename U>
544
template <typename T, typename U>
545
TracedValue<T> operator ^ (const TracedValue<T> &lhs, const U &rhs) {
545
auto operator ^ (const TracedValue<T> &lhs, const U &rhs) -> TracedValue<decltype(lhs.Get() ^ rhs)> {
546
  TRACED_VALUE_DEBUG ("x^");
546
  TRACED_VALUE_DEBUG ("x^");
547
  return TracedValue<T> (lhs.Get () ^ rhs);
547
  return TracedValue<decltype(lhs.Get() ^ rhs)>(lhs.Get () ^ rhs);
548
}
548
}
549
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
549
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
550
template <typename T, typename U>
550
template <typename T, typename U>
551
TracedValue<T> operator ^ (const U &lhs, const TracedValue<T> &rhs) {
551
auto operator ^ (const U &lhs, const TracedValue<T> &rhs) -> TracedValue<decltype(lhs ^ rhs.Get())> {
552
  TRACED_VALUE_DEBUG ("^x");
552
  TRACED_VALUE_DEBUG ("^x");
553
  return TracedValue<T> (lhs ^ rhs.Get ());
553
  return TracedValue<decltype(lhs ^ rhs.Get())>(lhs ^ rhs.Get ());
554
}
554
}
555
555
556
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
556
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
557
template <typename T, typename U>
557
template <typename T, typename U>
558
TracedValue<T> operator | (const TracedValue<T> &lhs, const TracedValue<U> &rhs) {
558
auto operator | (const TracedValue<T> &lhs, const TracedValue<U> &rhs) -> TracedValue<decltype(lhs.Get() | rhs.Get())> {
559
  TRACED_VALUE_DEBUG ("x|x");
559
  TRACED_VALUE_DEBUG ("x|x");
560
  return TracedValue<T> (lhs.Get () | rhs.Get ());
560
  return TracedValue<decltype(lhs.Get() | rhs.Get())>(lhs.Get () | rhs.Get ());
561
}
561
}
562
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
562
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
563
template <typename T, typename U>
563
template <typename T, typename U>
564
TracedValue<T> operator | (const TracedValue<T> &lhs, const U &rhs) {
564
auto operator | (const TracedValue<T> &lhs, const U &rhs) -> TracedValue<decltype(lhs.Get() | rhs)> {
565
  TRACED_VALUE_DEBUG ("x|");
565
  TRACED_VALUE_DEBUG ("x|");
566
  return TracedValue<T> (lhs.Get () | rhs);
566
  return TracedValue<decltype(lhs.Get() | rhs)>(lhs.Get () | rhs);
567
}
567
}
568
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
568
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
569
template <typename T, typename U>
569
template <typename T, typename U>
570
TracedValue<T> operator | (const U &lhs, const TracedValue<T> &rhs) {
570
auto operator | (const U &lhs, const TracedValue<T> &rhs) -> TracedValue<decltype(lhs | rhs.Get())> {
571
  TRACED_VALUE_DEBUG ("|x");
571
  TRACED_VALUE_DEBUG ("|x");
572
  return TracedValue<T> (lhs | rhs.Get ());
572
  return TracedValue<decltype(lhs | rhs.Get())>(lhs | rhs.Get ());
573
}
573
}
574
574
575
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
575
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
576
template <typename T, typename U>
576
template <typename T, typename U>
577
TracedValue<T> operator & (const TracedValue<T> &lhs, const TracedValue<U> &rhs) {
577
auto operator & (const TracedValue<T> &lhs, const TracedValue<U> &rhs) -> TracedValue<decltype(lhs.Get() & rhs.Get())> {
578
  TRACED_VALUE_DEBUG ("x&x");
578
  TRACED_VALUE_DEBUG ("x&x");
579
  return TracedValue<T> (lhs.Get () & rhs.Get ());
579
  return TracedValue<decltype(lhs.Get() & rhs.Get())>(lhs.Get () & rhs.Get ());
580
}
580
}
581
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
581
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
582
template <typename T, typename U>
582
template <typename T, typename U>
583
TracedValue<T> operator & (const TracedValue<T> &lhs, const U &rhs) {
583
auto operator & (const TracedValue<T> &lhs, const U &rhs) -> TracedValue<decltype(lhs.Get() & rhs)> {
584
  TRACED_VALUE_DEBUG ("x&");
584
  TRACED_VALUE_DEBUG ("x&");
585
  return TracedValue<T> (lhs.Get () & rhs);
585
  return TracedValue<decltype(lhs.Get() & rhs)>(lhs.Get () & rhs);
586
}
586
}
587
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
587
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
588
template <typename T, typename U>
588
template <typename T, typename U>
589
TracedValue<T> operator & (const U &lhs, const TracedValue<T> &rhs) {
589
auto operator & (const U &lhs, const TracedValue<T> &rhs) -> TracedValue<decltype(lhs & rhs.Get())> {
590
  TRACED_VALUE_DEBUG ("&x");
590
  TRACED_VALUE_DEBUG ("&x");
591
  return TracedValue<T> (lhs & rhs.Get ());
591
  return TracedValue<decltype(lhs & rhs.Get())>(lhs & rhs.Get ());
592
}
592
}
593
593
594
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
594
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
595
template <typename T, typename U>
595
template <typename T, typename U>
596
TracedValue<T> operator << (const TracedValue<T> &lhs, const TracedValue<U> &rhs) {
596
auto operator << (const TracedValue<T> &lhs, const TracedValue<U> &rhs) -> TracedValue<decltype(lhs.Get() << rhs.Get())> {
597
  TRACED_VALUE_DEBUG ("x<<x");
597
  TRACED_VALUE_DEBUG ("x<<x");
598
  return TracedValue<T> (lhs.Get () << rhs.Get ());
598
  return TracedValue<decltype(lhs.Get() << rhs.Get())>(lhs.Get () << rhs.Get ());
599
}
599
}
600
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
600
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
601
template <typename T, typename U>
601
template <typename T, typename U>
602
TracedValue<T> operator << (const TracedValue<T> &lhs, const U &rhs) {
602
auto operator << (const TracedValue<T> &lhs, const U &rhs) -> TracedValue<decltype(lhs.Get() << rhs)> {
603
  TRACED_VALUE_DEBUG ("x<<");
603
  TRACED_VALUE_DEBUG ("x<<");
604
  return TracedValue<T> (lhs.Get () << rhs);
604
  return TracedValue<decltype(lhs.Get() << rhs)>(lhs.Get () << rhs);
605
}
605
}
606
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
606
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
607
template <typename T, typename U>
607
template <typename T, typename U>
608
TracedValue<T> operator << (const U &lhs, const TracedValue<T> &rhs) {
608
auto operator << (const U &lhs, const TracedValue<T> &rhs) -> TracedValue<decltype(lhs << rhs.Get())> {
609
  TRACED_VALUE_DEBUG ("<<x");
609
  TRACED_VALUE_DEBUG ("<<x");
610
  return TracedValue<T> (lhs << rhs.Get ());
610
  return TracedValue<decltype(lhs << rhs.Get())>(lhs << rhs.Get ());
611
}
611
}
612
612
613
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
613
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
614
template <typename T, typename U>
614
template <typename T, typename U>
615
TracedValue<T> operator >> (const TracedValue<T> &lhs, const TracedValue<U> &rhs) {
615
auto operator >> (const TracedValue<T> &lhs, const TracedValue<U> &rhs) -> TracedValue<decltype(lhs.Get() >> rhs.Get())> {
616
  TRACED_VALUE_DEBUG ("x>>x");
616
  TRACED_VALUE_DEBUG ("x>>x");
617
  return TracedValue<T> (lhs.Get () >> rhs.Get ());
617
  return TracedValue<decltype(lhs.Get() >> rhs.Get())>(lhs.Get () >> rhs.Get ());
618
}
618
}
619
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
619
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
620
template <typename T, typename U>
620
template <typename T, typename U>
621
TracedValue<T> operator >> (const TracedValue<T> &lhs, const U &rhs) {
621
auto operator >> (const TracedValue<T> &lhs, const U &rhs) -> TracedValue<decltype(lhs.Get() >> rhs)> {
622
  TRACED_VALUE_DEBUG ("x>>");
622
  TRACED_VALUE_DEBUG ("x>>");
623
  return TracedValue<T> (lhs.Get () >> rhs);
623
  return TracedValue<decltype(lhs.Get() >> rhs)>(lhs.Get () >> rhs);
624
}
624
}
625
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
625
/** \copydoc operator+(const TracedValue<T>&lhs,const TracedValue<U>&rhs) */
626
template <typename T, typename U>
626
template <typename T, typename U>
627
TracedValue<T> operator >> (const U &lhs, const TracedValue<T> &rhs) {
627
auto operator >> (const U &lhs, const TracedValue<T> &rhs) -> TracedValue<decltype(lhs >> rhs.Get())> {
628
  TRACED_VALUE_DEBUG (">>x");
628
  TRACED_VALUE_DEBUG (">>x");
629
  return TracedValue<T> (lhs >> rhs.Get ());
629
  return TracedValue<decltype(lhs >> rhs.Get())>(lhs >> rhs.Get ());
630
}
630
}
631
631
632
/**
632
/**

Return to bug 2658