text: #ifndef LIBTENSOR_SYMMETRY_ELEMENT_TARGET_H
  #define LIBTENSOR_SYMMETRY_ELEMENT_TARGET_H
  
  #include "../defs.h"
  #include "../exception.h"
  #include "../core/symmetry_element_i.h"
  
  namespace libtensor {
  
  
  template<size_t N, typename T>
  class symmetry_element_target_base : public symmetry_element_target_i<N, T> {
  public:
      //!    \name Implementation of
      //!        libtensor::symmetry_element_target_i<N, T>
      //@{
      virtual void accept_default(const symmetry_element_i<N, T> &elem) { };
      //@}
  
  };
  
  
  template<size_t N, typename T, typename ElemT>
  class symmetry_element_target :
      virtual public symmetry_element_target_base<N, T> {
  
      public:
          virtual void accept(const ElemT &elem) { };
      };
  
  
      template<size_t N, typename T>
      class symmetry_element_target< N, T, symmetry_element_i<N, T> > :
      virtual public symmetry_element_target_base<N, T> {
  
      public:
          virtual void accept(const symmetry_element_i<N, T> &elem) {
  
              accept_default(elem);
          };
  
      };
  
  
  } // namespace libtensor
  
  #endif // LIBTENSOR_SYMMETRY_ELEMENT_TARGET_H
  