Вы уже сделали это. Конечно, фактический setprecision(prec)
может быть оценен первым. Но он ничего не делает, пока не «сместится» в поток. Выполнение:
setprecision(prec);
ничего не делает (полезно) само по себе, это только когда operator<<
потока вызывается с ним как аргумент, что что-то происходит, и, как вы заметили, вызов сериала <<
имеет гарантированный порядок оценки слева направо. Так что он уже делает то, что вы хотите; setprecision(prec)
может быть построен рано, но это никак не повлияет на поток, пока setprecision(3)
не изменит поток и не будет записано 10.000001
.