|
|
| 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 |
/** |