Usage: brainfuck("++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>."); The default arguments make it use std::cout and an empty string as input. You can also use a string as input: brainfuck(",[.,]", "input"); Or with a stream/container/iterator: brainfuck(",[.,]", std::input_iterator(std::cin)); You can specify the memory-units: brainfuck("..."); As long as the type has certain operators. The default output is comma-seperated, except for char. You can specify an output-iterator: brainfuck("...", "", std::back_inserter(my_vector)); It has a lot of defaultparameters, because it's intended use was on an irc-channel.