simples decltype
-
Keine Ahnung was der
static_castda soll ((char*)wird hier per Definition das gleiche Verhalten wie einstatic_casthaben). Odernullptr. Wird hier nicht helfen.
-
Arcoth schrieb:
Keine Ahnung was der
static_castda soll ((char*)wird hier per Definition das gleiche Verhalten wie einstatic_casthaben). [...]Schrabenzieher statt Holzhammer?
Arcoth schrieb:
[...] Oder
nullptr. Wird hier nicht helfen.Mir ist nicht klar, was Du damit ausdrücken möchtest?
typedef decltype( sizeof nullptr ) size_t;darf ich aber schon, gell?
-
Du beschwerst dich über die Hässlichkeit eines Ausdrucks der deutlich kürzer und lesbarer geschrieben werden kann?

typedef decltype( sizeof nullptr ) size_t;darf ich aber schon, gell?... ja, oder einfach
sizeof 0, oderusing namespace std::support_literals;und0zmit C++17 (voraussichtlich). Hast du einennullptrFetisch?
-
Arcoth schrieb:
Du beschwerst dich über die Hässlichkeit eines Ausdrucks der deutlich kürzer und lesbarer geschrieben werden kann?

Jo. Hab einen seltsamen Geschmack, ich weiß.
Arcoth schrieb:
Swordfish schrieb:
typedef decltype( sizeof nullptr ) size_t;darf ich aber schon, gell?... ja, oder einfach
sizeof 0, oder [...]Sorry, aber ich hab keine Lust zu suchen und Du weißt es wahrscheinlich sowieso: Wo steht
sizeof int == sizeof std::size_t?Arcoth schrieb:
Hast du einen
nullptrFetisch?Weiß nicht. Vielleicht.
-
Swordfish schrieb:
Sorry, aber ich hab keine Lust zu suchen und Du weißt es wahrscheinlich sowieso: Wo steht
sizeof int == sizeof std::size_t?Schlecht geschlafen?
-
Wenn's unbedingt eine Pointersubtraktion sein soll und nullptr_t drin vorkommen soll, man aber nicht casten möchte:
decltype(new nullptr_t - new nullptr_t);
PS: Wie erstelle ich eigentlich einen temporären Pointer ohne new? Es ist irgendwie peinlich, aber ich komme nicht auf die passende Syntax.
-
Arcoth schrieb:
Swordfish schrieb:
Sorry, aber ich hab keine Lust zu suchen und Du weißt es wahrscheinlich sowieso: Wo steht
sizeof int == sizeof std::size_t?Schlecht geschlafen?
Ne, warum? Wenn Du vermutest, daß ich evtl. auf Leitungen rumsteh' dann gib mir doch bitte einen Pointer (<-pun intended) in welche Richtung ich mich drehen soll.
SeppJ schrieb:
Wenn's unbedingt eine Pointersubtraktion sein soll und nullptr_t drin vorkommen soll, man aber nicht casten möchte:
decltype(new nullptr_t - new nullptr_t);
jaja, passt schon

SeppJ schrieb:
PS: Wie erstelle ich eigentlich einen temporären Pointer ohne new? Es ist irgendwie peinlich, aber ich komme nicht auf die passende Syntax.
garnicht? Die Adresse eines Temporaries darfst nicht nehmen?
-
Swordfish schrieb:
garnicht? Die Adresse eines Temporaries darfst nicht nehmen?
Ich meine nicht die Adresse eines Temporaries, sondern ein temporäres Pointerobjekt. À la
int (5);
-
Naja.
(int*)(42)ist ein cast. Ist der ausgewertete Ausdruck ein temporary?
-
Swordfish schrieb:
Naja.
(int*)(42)ist ein cast. Ist der ausgewertete Ausdruck ein temporary?Der ist zwar temporary, aber nicht in dem Sinne, den ich meine. Das hier will ich machen können:
void foo(int); void bar(int*); int main() { foo(int()); // Kein Problem, temporärer int, value initialized bar(???); // Wie temporären int* (value initialized) erzeugen? }Denn dann könntest du deinen
ptrdiff_tmittelsdecltype(??? - ???)bekommen, ganz ohne Cast, nullptr oder new.Das muss doch irgendwie gehen, aber ich komm nicht drauf. Ich sehe schon, dass ich mir ganz dumm vorkommen werde, wenn gleich Arcoth oder camper mit der Lösung kommen

edit: So langsam glaube ich, das geht gar nicht. Nach genügend Standardlektüre komme ich zu dem Schluss, dass "int*" ein elaborated type specifier ist. Aber als Typangabe für value initialization verlangt nach einem simple type specifier. Man müsste sich also vorher so etwas wie ein typedef auf int* machen, denn ein typedef gilt wieder als simple type specifier.
-
SeppJ schrieb:
Man müsste sich also vorher so etwas wie ein typedef auf int* machen, denn ein typedef gilt wieder als simple type specifier.
Das wär mein erster Tip gewesen. Plan B:
template< typename T > T* get_ptr() { T t; return &t; }... dereferenzieren will man das Ding ja sowieso nicht.
//edit: "value initialized" ... ne, ich glaub das wird nix.
//edihit: Nachdem unsere Standard-Cracks wohl schlafen geh' ich damit mal Leute auf SO ärgern ... http://stackoverflow.com/questions/28205578/how-to-create-a-temporary-value-initialized-t-in-standard-c
-
bar(decltype(new int)());ist technisch gesehen nat. trotzdem kein temporäres Objekt. Dafür müsste bar eine Referenz nehmen.
-
Yay! Kauf' ich!
//naja ... bis zur Kopie ists doch temporary. Vieleicht recht Sepp das ja schon

-
Ne, warum? Wenn Du vermutest, daß ich evtl. auf Leitungen rumsteh' dann gib mir doch bitte einen Pointer (<-pun intended) in welche Richtung ich mich drehen soll.
Wen interessiert der Wert von
sizeof blablubwenn du lediglich den Typ des Ausdrucks haben willst?
@SeppJ: Mit Zeigersyntax geht es nicht [expr.type.conv]/1:
A simple-type-specifier (7.1.6.2) or typename-specifier (14.6) followed by a parenthesized expression-list constructs a value of the specified type given the expression list.
simple-type-specifier sind entweder
decltype(..)(wie von camper ausgenutzt), die keywords für Typen (int,auto, usw.) oder qualified-ids.
-
Swordfish schrieb:
Yay! Kauf' ich!
//naja ... bis zur Kopie ists doch temporary. Vieleicht recht Sepp das ja schon

Skalare rvalues sind keine Objekte. Das temporäre Objekt entsteht erst, wenn an die Referenz gebunden werden soll. Bei Klassen ist das anders.
-
camper schrieb:
Skalare rvalues sind keine Objekte.
Formulier mal anders. Zumindest fuer xvalues stimmts nicht.
-
Arcoth schrieb:
camper schrieb:
Skalare rvalues sind keine Objekte.
Formulier mal anders. Zumindest fuer xvalues stimmts nicht.
Sag doch gleich, dass ein p fehlt.
-
camper schrieb:
Arcoth schrieb:
camper schrieb:
Skalare rvalues sind keine Objekte.
Formulier mal anders. Zumindest fuer xvalues stimmts nicht.
Sag doch gleich, dass ein p fehlt.
Wollt' ich auch, war mir aber nicht sicher ob die Aussage ueberhaupt sinnvoll ist. Ein skalarer Member einer Temporary ist doch ein Objekt?
-
Arcoth schrieb:
camper schrieb:
Arcoth schrieb:
camper schrieb:
Skalare rvalues sind keine Objekte.
Formulier mal anders. Zumindest fuer xvalues stimmts nicht.
Sag doch gleich, dass ein p fehlt.
Wollt' ich auch, war mir aber nicht sicher ob die Aussage ueberhaupt sinnvoll ist. Ein skalarer Member einer Temporary ist doch ein Objekt?
Natürlich. Wenn du Worte auf die Goldwaage legen möchtest, sollte evtl. noch "ist" durch "verweist auf" ersetzt werden. Natürlich sind Ausdrücke sowieso keine Objekte...
-
I.e. alles was du sagen wolltest war dass Wertkategorien Eigenschaften von Ausdrücken und nicht von Objekten sind?
