Is there a tab equivalent of std::endl within the standard library?

Solution 1:

No. std::endl isn't a newline constant. It's a manipulator which, in addition to inserting a newline, also flushes the stream.

If you just want to add a newline, you're supposed to just insert a '\n'. And if you just want to add a tab, you just insert a '\t'. There's no std::tab or anything because inserting a tab plus flushing the stream is not exactly a common operation.

Solution 2:

If you want to add the feature yourself, it would look like this:

#include <iostream>

namespace std {
  template <typename _CharT, typename _Traits>
  inline basic_ostream<_CharT, _Traits> &
  tab(basic_ostream<_CharT, _Traits> &__os) {
    return __os.put(__os.widen('\t'));
  }
}

int main() {

  std::cout << "hello" << std::endl;
  std::cout << std::tab << "world" << std::endl;
}

I don't recommend doing this, but I wanted to add a solution for completeness.

Solution 3:

Actually, it is not needed.

Because endl first does the same job of inserting a newline as \n, and then also flushes the buffer.

Inserting \t on a stream does not require to flush it after .