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