#include <iostream> 
#include <functional> 
#include <string> 

template<typename T, template <class> class binary_func> 
void processTwoVal(std::string const& text, 
               std::string const& op) 
{ 
        T val1, val2; 
        std::cout << "Geben Sie " << text << " ein: "; 
        std::cin >> val1; 
        std::cout << "Geben Sie noch " << text << " ein: "; 
        std::cin >> val2; 

        std::cout << val1 << ' ' << op << ' ' << val2 << " = " << binary_func<T>()(val1, val2) << "\n\n"; 
} 

int main() 
{ 
    std::cout << std::boolalpha; 

    processTwoVal<int, std::plus>("eine ganzzahlige Variable", "+"); 

    processTwoVal<float, std::minus>("eine Gleitpunktzahl", "-"); 

    processTwoVal<bool, std::logical_and>("einmal 1(wahr) oder 0(falsch)", "&&"); 

    processTwoVal<char, std::not_equal_to>("ein Zeichen", "!="); 

    processTwoVal<std::string, std::less>("eine Zeichenkette", "<"); 
}