fork download
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. struct lua_State {};
  5. template <class T>
  6. class Data
  7. {
  8. public:
  9. static T& storedValueFromLuaStack(lua_State* state, int index)
  10. {
  11. static T a{};
  12. return a;
  13. }
  14. static Data<T> fromLuaStack(lua_State* state, int index)
  15. {
  16. return Data<T>{};
  17. }
  18. };
  19.  
  20. template <class U>
  21. class interpretValueReturnType
  22. {
  23. public:
  24. interpretValueReturnType(lua_State *state, int index) : state(state), index(index) {}
  25.  
  26. operator U& () &&
  27. {
  28. return Data<U>::storedValueFromLuaStack(state, index);
  29. }
  30.  
  31. operator Data<U> () &&
  32. {
  33. return Data<U>::fromLuaStack(state, index);
  34. }
  35. private:
  36. lua_State *state;
  37. int index;
  38. };
  39.  
  40. template <class U>
  41. interpretValueReturnType<U> interpretValue(lua_State *state, int index)
  42. {
  43. return interpretValueReturnType<U>(state, index);
  44. }
  45.  
  46. int main() {
  47. lua_State *state;
  48. int& a = interpretValue<int>(state, 1);
  49. Data<int> b = interpretValue<int>(state, 1);
  50.  
  51. auto c = interpretValue<float>(state, 1);
  52. float& d = std::move(c);
  53. }
Success #stdin #stdout 0s 3408KB
stdin
Standard input is empty
stdout
Standard output is empty