Simple I/O manipulator not working as intended

Viewed 160

the following code:

#include <iostream>

std::ios_base &my_manip (std::basic_ios<char> &os) {
    os.unsetf(std::ios_base::basefield);
    os.setf(std::ios_base::scientific);
    return os;
}

int main (int argc, char **argv) {
    std::cout << 8.8888888 << std::endl;
    std::cout << my_manip << 8.8888888 << std::endl;
    return 0;
}

prints:

8.88889

18.88889

While the following code:

#include <iostream>

std::ios_base &my_manip (std::basic_ios<char> &os) {
    os.unsetf(std::ios_base::basefield);
    os.setf(std::ios_base::scientific);
    return os;
}

int main (int argc, char **argv) {
    std::cout << 8.8888888 << std::endl;
    my_manip(std::cout);
    std::cout << 8.8888888 << std::endl;
    return 0;
}

prints the expected result:

8.88889

8.888889e+00

Can anybody tell me what is wrong with the first version?

3 Answers
Related