    #include <iostream>


    class test {
    public:

      template<typename T>
      friend test& operator&(test& so, T const& t);
    };
    
    template<typename T>
    inline test& operator&(test& so, T const& t) {
        std::cout << "is_pointer        : " << std::is_pointer<T>::value << std::endl;
        static_assert(std::is_pointer<T>::value, "no operator overloaded for pointers.");
       
        // some stuff
        return so;
      }

    int main() {
      test t;
      t & 123;
      return 0;
    }