fork download
  1. #include <iostream>
  2. #include <type_traits>
  3. using namespace std;
  4.  
  5. template <typename T>
  6. T rvalue() { return T(); }
  7.  
  8. template <typename T>
  9. T& lvalue() { static T t; return t; }
  10.  
  11. int main() {
  12. cout << is_assignable<double, int>::value;
  13. cout << is_assignable<double, int&>::value;
  14. cout << is_assignable<double&, int>::value;
  15. cout << is_assignable<double&, int&>::value;
  16.  
  17. // rvalue<double>() = rvalue<int>(); // Doesn't compile
  18. // rvalue<double>() = lvalue<int>(); // Doesn't compile
  19. lvalue<double>() = rvalue<int>(); // OK
  20. lvalue<double>() = lvalue<int>(); // OK
  21. return 0;
  22. }
  23.  
Success #stdin #stdout 0s 3340KB
stdin
Standard input is empty
stdout
0011