fork(2) download
  1. template <class T, class Tuple>
  2. struct Index;
  3.  
  4. template <class T, class... Types>
  5. struct Index<T, std::tuple<T, Types...>> {
  6. static const std::size_t value = 0;
  7. };
  8.  
  9. template <class T, class U, class... Types>
  10. struct Index<T, std::tuple<U, Types...>> {
  11. static const std::size_t value = 1 + Index<T, std::tuple<Types...>>::value;
  12. };
  13.  
  14. template<class EnumType, template<class T, T> class Element, EnumType... enumValues>
  15. class Map
  16. {
  17. public:
  18. using Type = std::tuple<Element<EnumType, enumValues>...>;
  19.  
  20. template<EnumType enumValue>
  21. using index = Index<Element<EnumType, enumValue>, Type>;
  22.  
  23. template<EnumType enumValue>
  24. Element<EnumType, enumValue>& get();
  25.  
  26. Type storage_;
  27. };
  28.  
  29. template<class EnumType, template<class T, T> class StorageElement, EnumType... enumValues>
  30. template<EnumType enumValue>
  31. StorageElement<EnumType, enumValue>& Map<EnumType, StorageElement, enumValues...>::get()
  32. {
  33. return std::get<index<enumValue>::value>(storage_);
  34. }
Compilation error #stdin compilation error #stdout 0s 0KB
stdin
Standard input is empty
compilation info
prog.cpp:5:19: error: ‘tuple’ is not a member of ‘std’
   struct Index<T, std::tuple<T, Types...>> {
                   ^~~
prog.cpp:5:19: error: ‘tuple’ is not a member of ‘std’
prog.cpp:5:38: error: wrong number of template arguments (3, should be 2)
   struct Index<T, std::tuple<T, Types...>> {
                                      ^~~
prog.cpp:2:10: note: provided for ‘template<class T, class Tuple> struct Index’
   struct Index;
          ^~~~~
prog.cpp:5:41: error: expected unqualified-id before ‘>’ token
   struct Index<T, std::tuple<T, Types...>> {
                                         ^~
prog.cpp:10:19: error: ‘tuple’ is not a member of ‘std’
   struct Index<T, std::tuple<U, Types...>> {
                   ^~~
prog.cpp:10:19: error: ‘tuple’ is not a member of ‘std’
prog.cpp:10:38: error: wrong number of template arguments (3, should be 2)
   struct Index<T, std::tuple<U, Types...>> {
                                      ^~~
prog.cpp:2:10: note: provided for ‘template<class T, class Tuple> struct Index’
   struct Index;
          ^~~~~
prog.cpp:10:41: error: expected unqualified-id before ‘>’ token
   struct Index<T, std::tuple<U, Types...>> {
                                         ^~
prog.cpp:18:23: error: ‘tuple’ in namespace ‘std’ does not name a template type
     using Type = std::tuple<Element<EnumType, enumValues>...>;
                       ^~~~~
prog.cpp:21:57: error: ‘Type’ was not declared in this scope
       using index = Index<Element<EnumType, enumValue>, Type>;
                                                         ^~~~
prog.cpp:21:61: error: template argument 2 is invalid
       using index = Index<Element<EnumType, enumValue>, Type>;
                                                             ^
prog.cpp:26:5: error: ‘Type’ does not name a type
     Type storage_;
     ^~~~
prog.cpp: In member function ‘StorageElement<EnumType, enumValue>& Map<EnumType, Element, enumValues>::get()’:
prog.cpp:33:10: error: ‘get’ is not a member of ‘std’
   return std::get<index<enumValue>::value>(storage_);
          ^~~
prog.cpp:33:19: error: ‘index’ was not declared in this scope
   return std::get<index<enumValue>::value>(storage_);
                   ^~~~~
prog.cpp:33:35: error: ‘::value’ has not been declared
   return std::get<index<enumValue>::value>(storage_);
                                   ^~
prog.cpp:33:44: error: ‘storage_’ was not declared in this scope
   return std::get<index<enumValue>::value>(storage_);
                                            ^~~~~~~~
stdout
Standard output is empty