D26432: Port endl to std::cout/std::cerr or "\n" + flush when necessary. In qt5.15 endl is namespaced.

David Faure noreply at phabricator.kde.org
Sun Jan 5 18:26:26 GMT 2020


dfaure requested changes to this revision.
dfaure added a comment.
This revision now requires changes to proceed.


  Oh boy this is going to really give a big conflict with D26202 <https://phabricator.kde.org/D26202>!
  
  Given that this commit is "more trivial" than D26202 <https://phabricator.kde.org/D26202>, maybe it should happen again *after* D26202 <https://phabricator.kde.org/D26202> lands...

INLINE COMMENTS

> anthonyfieroni wrote in kconfigtest.cpp:533-542
> When it has only strings you can use `R"()"`
> https://en.cppreference.com/w/cpp/language/string_literal

What would be the benefit here? One double-backslash simplified to a single one, and that's it, right?

> kconfig_compiler.cpp:694
>          defaultValue = QLatin1String("default") + name;
> -
> +        cpp.flush();
>      } else if (type == QLatin1String("Color") && !defaultValue.isEmpty()) {

Why? Surely the QTextStream destructor (which is called here) will take care of that.

> kconfig_compiler.cpp:729
>          defaultValue = QLatin1String("default") + name;
> +        cpp.flush();
>      }

(same)

> kconfig_compiler.cpp:881
>      } else if (name.contains(' ')) {
> -        cout << "Entry '" << name << "' contains spaces! <name> elements can not contain spaces!" << endl;
> +        std::cout << "Entry '" << qPrintable(name) << "' contains spaces! <name> elements can not contain spaces!" << std::endl;
>          name.remove(' ');

(pre-existing) Strange that this one is cout and not cerr...

> kconfig_compiler.cpp:1379
> +    out << ";\n";
> +    out.flush();
>      return result;

I've been wondering if this flush() is needed.

In my tests, it works without. http://www.davidfaure.fr/2020/qtextstream_flush.cpp
QTextStream is notified of the QString being deleted, and flushes.

But in theory local variables are deleted *after* the return value is copied (otherwise mutex lockers wouldn't make sense, stack overflow confirms) so in the absence of named-return-value-optimization (which IIRC is only guaranteed in C++17 and later), the copying could happen before the flushing.

Unless I missed something, let's keep the `flush()` to be safe :-)

REPOSITORY
  R237 KConfig

REVISION DETAIL
  https://phabricator.kde.org/D26432

To: mlaurent, dfaure, tcanabrava
Cc: anthonyfieroni, kde-frameworks-devel, LeGast00n, GB_2, michaelh, ngraham, bruns
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.kde.org/pipermail/kde-frameworks-devel/attachments/20200105/306235cf/attachment-0001.html>


More information about the Kde-frameworks-devel mailing list