Genau am gleichen Problem bin ich mit Live auch, ich habe es aber inzwischen durch DISABLE_TEMPLATES_COLLIDING_WITH_STL statt STLCONFIG_H hinbekommen.
VDR Developer Version 2.5.4
-
-
-
hi kfb77, warte doch bitte etwas.
-
kfb77: Probier doch mal bitte: git clone -b remove_namespace_std_part2 git@github.com:wirbel-at-vdr-portal/vdr-plugin-live.git
-
Mich würde interessieren wie der TSCheck für Endanwender nutzbar ist, bzw, wie Skins mit dem O Tag in der info Dateien umgehen?
-
Da muss ich irgendwas übersehen haben, deine Version geht ohne DISABLE_TEMPLATES_COLLIDING_WITH_STL. Am Diff konnte ich nichts erkennen, weil du gleich auch bei den Blanks aufgeräumt hast und somit wieder alle Änderungen im Diff waren. Find ich außerdem gut.
Ist doch schön, wenn wir zwei Lösungen haben und uns die bessere raus suchen können. Ich habe deine übernommen und noch ergänzt um das Entfernen der nicht mehr vorhanden __STL_CONFIG_H. Vielen Dank.
Damit es keine Verwechslungen gibt, habe ich das o.g. Branch gelöscht, hier die neue Version.
Edit: zu früh gefreut, wenn man im Live im VDR Verzeichnis baut, kommt der Fehler wieder, DISABLE_TEMPLATES_COLLIDING_WITH_STL wieder hinzugefügt
-
Zitat
Am Diff konnte ich nichts erkennen,
Möchtest du die Änderungen in einem separaten Thread durchgehen? Falls ja, gerne.
-
Das Problem mit dem swap(,) , der uneindeutig wird, läss sich im vdr lösen, indem wieder abgefragt wird, ob _MOVE_H definiert ist (wie in den Versionen vorher auch)
Diff
Alles anzeigen--- tools.h.orig 2021-05-22 21:21:17.967112345 +0200 +++ tools.h 2021-05-22 21:21:47.802718408 +0200 @@ -57,8 +57,10 @@ #if !defined(DISABLE_TEMPLATES_COLLIDING_WITH_STL) template<class T> inline T min(T a, T b) { return a <= b ? a : b; } template<class T> inline T max(T a, T b) { return a >= b ? a : b; } +#if !defined(_MOVE_H) template<class T> inline void swap(T &a, T &b) { T t = a; a = b; b = t; } #endif +#endif template<class T> inline int sgn(T a) { return a < 0 ? -1 : a > 0 ? 1 : 0; } template<class T> inline T constrain(T v, T l, T h) { return v < l ? l : v > h ? h : v; }
z.B. zieht epgsearch in Ubuntu-focal /usr/include/c++/9/bits/unique_ptr.h rein, wo ab Zeile 399 steht
using std::swap
swap(...)
...
-
indem wieder abgefragt wird, ob _MOVE_H definiert ist (wie in den Versionen vorher auch)
Womit wir uns im Kreis drehen würden.
Ich möchte keine STL-spezfischen Macros mehr abfragen, die sich womöglich plötzlich ändern können.
Wer es nicht schafft, mit Sprachmitteln das Problem zu lösen kann doch einfach DISABLE_TEMPLATES_COLLIDING_WITH_STL definieren und fertig.
-
wie wäre es mit dem Wert von __cplusplus ?
-
-
Cool!
-
-
Ich wollte nur darauf hinweisen, dass auch ohne "using namespace std" und Aufruf von swap() Plugins in diese Falle laufen können.
Ich habe jetzt bei epgsearch DISABLE_TEMPLATES_COLLIDING_WITH_STL eingefügt und kann ohne Probleme damit leben.
-
-
M-Reimer Was ist so schwer daran, wenn Plugins, die dieses Problem haben (was ja beileibe nicht alle sind), einfach vor dem Includieren jeglicher VDR-Header-Files '#define DISABLE_TEMPLATES_COLLIDING_WITH_STL' machen? Gibt es einen Fall, wo das nicht hilft?
Musst letztlich du wissen wie "angenehm" Plugin-Entwicklung sein soll. Ist halt schade das in "tools.h" auch einiges drin ist, das für Plugins durchaus praktisch sein kann. Und wie hier mittlerweile gezeigt wurde braucht es eben kein "using namespace std" um das Problem zu triggern. Man kann da durchaus auch unerwartet reinrennen und dann erstmal suchen wer da genau was vergurkt hat.
-
-
Kein echtes Problem, kann z.B. in das Makefile.
-
-
#include <algorithm> // std::min, std::max, (c++98: also swap)
#include <utility> // std::swap (since c++11)
#if __cplusplus >= 201103L
/* any gcc >= 4.8.1; we have swap, min, max*/
/* i.e.
* using std::min;
* using std::max;
* using std::swap;
*/
#else
/* no c++11 and old compiler,
* lets include our own templates.
*/
#endif
@kann in das Makefile des Plugins, man kann das ja auch für neue Plugins mit
#DEFINES += -DDISABLE_TEMPLATES_COLLIDING_WITH_STL
lösen. Geht ja auch..
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!