Saturday, November 5, 2016

Digest for comp.lang.c++@googlegroups.com - 25 updates in 6 topics

Ramine <ramine@1.1>: Nov 05 03:41PM -0400

Salut,
 
 
Maintenant de la mathematique de la philosophie politique..
 
Il y'en a qui vont affirmer naivement , que la politique
ce n'est pas de la mathematique, moi je vais les contredire
et leur dire que la politique c'est aussi de la mathematique,
alors je commence ma demonstration mathematique avec la ruse
de la logique comme suit:
 
Prenons par exemple l'essence de Loi..
 
Mais comme donc inferer la Loi à votre avis ?
 
Par la ruse de la logique bien entendu..
 
Je vous donne un exemple:
 
La Loi est inferée aussi par la Loi du pouvoir et du contre pouvoir.
 
C'est comme la Loi de l'offre et la demande en economie..
 
Alors prenons ma demonstration logique sur la discrimination
sur les immigrants engendrée par l'egoisme engendré par la tristesse,
puisque le peuple n`est pas vraiment joyeux et cela c`est les données
empiriques qui nous le disent.
 
Alors prenons par exemple la France, nous devons inferer la Loi de la
Loi du pouvoir et du contre pouvoir, puisque l`Afrique et le monde Arabe
sont des consommateurs aussi et ils font des affaires avec
le monde occidental , alors la Loi du pouvoir et du contre pouvoir exige
de nous de ne pas negliger le pouvoir de l`Afrique et du monde arabe,
puisque ce sont des consommateurs qui consomment des produits
par exemple du secteur secondaire de la France et ils consomment
bien d`autres produits et services et ils font aussi des affaires avec
la France, alors de cela nous pouvons inferer par la Loi du pouvoir et
contre pouvoir que les immigrés magrebins et africains meritent un
traitement plus convenable avec une morale plus convenable à la Loi du
pouvoir et contre pouvoir qui nous dit que cela est une chose importante
car l`image de la France est importante dans les
relations entre la France ou l`Europe d`un coté et l`Afrique et le monde
Arabe de l`autre.
 
Cela est ma première demonstration par la ruse de la logique de
comment inferer la Loi au niveau de l`essence de la Loi.
 
Ma deuxième demonstration par la ruse de la logique sur ce sujet,
de commment inferer la Loi au niveau de l`essence de la Loi c`est
ceci:
 
Puisque la compassion et le respect qui sont des variables participant
à l`optimisation du système politique et qui engendrent la qualité
du social et de la securité, alors ces variables sont importantes
aussi et on ne peut les negliger et donnwe plutot que la priorité
à la variable de force, donc de la performance, comme le faisait le
nazisme, car pour un logicien et un sage comme moi, les variables
de la compassion et du respect améne aussi de la qualité , puisque
le principe qui nous dit que le fait de ne pas souffrir est
une chose d`une extreme importance et qui merite notre respect, donc
cela vient mettre une plus grande priorité sur les variables de
compassion et de respect, donc pour un logicien comme moi, puisque ces
variables sont aussi très importantes dans le modèle politique, alors
le fait de les negliger en faveur de la performance est un
extremisme non acceptable par la logique mathematique, donc
le fait de dire il n`y a que la performance ou de donner
à la performance trop d`importance par rapport à la
compassion comme le faisait le nazisme est une chose non acceptable
par la logique mathematique. Et c`est cela aussi la mathematique.
 
 
Revenons maintenant à la Loi de l`offre de la demande en economie..
 
J`ai dit que la conception qui est de dire que la domination economique
des pays du Nord sur les pays du Sud dans le secteur secondaire n`est
plus considèré comme dans le passé non acceptable, puisque le modernisme
nous dicte qu`elle est devenu plus acceptable, voici la demonstration
avec la ruse de la logique qui le prouve:
 
Maintenant ma philosophie sur la politique..
 
Moi je suis comme les philosophes logiciens comme Hegel et Kant,
et chez moi c`est la logique appliquée qui prime aussi, et la
ruse en logique chez moi est nécessaire comme je viens
de l`expliquer, et chez moi la politique c`est comme jouer
aux echecs, alors comment croyez-vous que je vais aborder
la question de ma philosophie sur la politique? mais qu`est-ce
que donc philosopher sur la politique comme le faisait Kant et Hegel?
alors la methode qui consiste à ruser avec de la logique pour
simplifier au maximum la compléxité est aussi ma methode preférée,
alors je ne vais pas y aller par mille chemins et je vais philosopher
comme suit sur la politique: Comme je vous ai dit precedement il
faudrait par la ruse simplifier le modèle , et cela a debouché avec mon
raisonnement logique à le simplifier en trois variables que sont: La
compassion et le respect et la performance, et j`ai dit que logiquement
que à priori en logique: Les variables de compassion et de respect
engendrent la qualité du social et la qualité de la securité, et la
variable de performance engendre de la performance, alors tout commence
à s`eclaicir avec ma ruse en logique, car les nationalistes maintenant
interpretent la securité qui est causée par les variables
de compassion et de respect, comme faisant defaut, alors
vous allait voir la famille Le Pen, comme Marine Le Pen et
Le Pére Le Pen dire par exemple que: "L`Afrique aux africains",
mais cela est une conception archaïque, car les nationalistes
ne comprennent pas que le Liberalisme qui contient en lui même
les principes d`une morale convenable, et que j`ai demontré logiquement,
nous dit que la domination jusqu`a un certain niveau
est une affaire normale en economie, mais le modèle Liberal nous suggère
de jouer aux echecs comme des renards et profiter de la benediction
qu`est le Liberalisme, mais comme je l`ai expliqué dans
mon poste precedant, quand je dis:
 
Cardinal de fr.soc.politique tu es vraiment intelligent.
 
Cela sonne bien, mais c`est cela la base de l`economie, c`est
aussi le message qui te donne de l`image, et la base de l`economie
aussi c`est qu`il faut savoir perdre pour gagner, alors il faut par
exemple savoir donner jusqu`a un certain point pour donner l`impression
comme un renard que tu es bon aussi, pour pouvoir vendre
dans les marchés des autres et gagner aprés cela.
 
Et c`est cela l`economie , car le principe fondateur de l`economie
Liberale, c`est que quand tu fais attention à ton image , donc
tu fais attention aux indicateurs sociaux et economiques, et cela rend
nécessaire une morale qui est convenable et plus jolie pour pouvoir
gagner en economie.
 
Mais quand je dis jouer aux echecs en economie, vous comprenez bien que:
 
"Les modèles économiques élaborés par les économistes du développement
des années 60, fondés sur l'idée des industries industrialisantes,
semblent de plus en plus perdre de leurs adeptes inconditionnels. Le
développement économique d'un pays ou d'une région n'est plus tributaire
du développement du secteur secondaire soit l'industrie lourde."
 
Lisez le tout ici dans le journal l'Economiste:
 
http://www.leconomiste.com/article/915791-la-conqu-te-conomique-de-l-afrique-passe-par-le-secteur-des-servicespar-m-fadel-el-ha
 
Alors vous comprenez bien que cela facilite la reussite du Liberalisme ,
donc la domination economique jusqu`à un certain point sur l`Afrique ou
d`autres pays dans le seteur secondaire devient convenable, donc
le message de "L`Afrique aux africains" n`est plus acceptable
au sein du Liberalisme, et pourquoi croyez-vous que la famille
Le Pen dit: "L`Afrique aux africains", c`est parceque elle
voudrait que cette immigration des pays du Sud vers les pays du Nord
cesse, ce message des Le Pen c`est du racisme deguisé, c`est ce que fait
d`ailleurs monsieur Spartacus sur ce forum de fr.soc.politique, il
encourage ce même message de Le Pen avec le même but de ces
nationalistes, alors vous comprenez que moi je ne suis pas daccord
avec ces nationalistes, Je vais rajouter un point essentiel à ma
philosophie politique, et puisque je suis informaticien et je m`y
connais en optimisation, alors j`en arrive à un point essentiel qui me
met en desaccord avec Marine Lepen et le parties d`extreme droites qui
lui ressemble, et ce point essentiel c`est celui du critère
d`optimisation, ce que essaye de faire la politique de l`union
européenne c`est d`optimiser l`Europe, comme on optimise en
informatique, et cette optimisation revèle la faiblesse de l`extreme
droite, car l`extreme droite nous dit que les français de souche et la
blancheur de la peau prend de la precedance, mais l`Europe raisonne
comme en optimisation en informatique, et la politique européenne nous
dit que l`optimisation ce n`est pas donner la precedence à
la couleur de peau blanche ou donner la precedence aux français
de souche , mais c`est donner la precedence à l`optimisation
de l'Europe en tenant compte des critères d`optimisation, c`est
cela la faiblesse de l`extreme droite qui cache son jeux
au peuple en pretextant qu`ils defendent les populations
de souche à couleur de peau blanche.
 
Alors je vous invite encore à lire sur ce que j`ai dit auparavant
pour me comprendre mieux:
 
Le Pen le père disait: "L`Afrique aux africains"
 
Et je ne crois pas que Marine Le Pen est differente.
 
Mais moi je crois que ce message de la famille Le Pen est
vraiment bète.
 
Car ce message en lui même contient intrinséquement en lui
le fait que les africains doivent avoir recours au nationalisme
extremiste qui utilise le protectionnisme d`une manière non convenable.
 
Mais cela rentre en contradiction avec le principe fondateur
convenable du Liberalisme qui nous dit que si tu veux attirer
les investissements, alors tu dois ouvrir tes marchés plus
convenablement, et ce principe ne rentre pas en contradiction
avec la science, puisque si tu veux proteger ton secteur
secondaire en ayant recours au protectionnisme , cela
aura tendance aussi à abaisser la qualité des produits,
donc cela demontre bien que au sein du Liberalisme, le
message de: "L`Afrique aux africains", n`est pas accepté
en tant que tel.
 
Donc cela demontre que la famille Le Pen a une vue vraiment
restreinte et bête de ce que devrait être l`Afrique.
 
Je continu...
 
 
Parlons economie à propos de mon texte ci-haut:
 
Vous comprenez ce que je pense sur le message suivant:
 
Le Pen le père disait: "L`Afrique aux africains"
 
Alors comme je disais, ce message est bête , car l`Afrique
n`appartient qu`aux africains, car cette conception archaïque
est depassée, et voici ma demonstration logique avec des preuves:
 
 
Lire premièrement ceci:
 
"Les modèles économiques élaborés par les économistes du développement
des années 60, fondés sur l'idée des industries industrialisantes,
semblent de plus en plus perdre de leurs adeptes inconditionnels. Le
développement économique d'un pays ou d'une région n'est plus tributaire
du développement du secteur secondaire soit l'industrie lourde."
 
Lisez le tout ici dans le journal l'Economiste:
 
http://www.leconomiste.com/article/915791-la-conqu-te-conomique-de-l-afrique-passe-par-le-secteur-des-servicespar-m-fadel-el-ha
 
 
Donc puisque le développement économique d'un pays ou d'une région n'est
plus tributaire du développement du secteur secondaire soit l'industrie
lourde, alors ce n`est pas necessaire pour l`Afrique à avoir recours au
protectionnisme au niveau du secteur secondaire, donc l`Afrique aura
tendance à acheter les produits du secteur secondaire et
technologique qui lui viennent de l`exterieur de l`Afrique, mais ce
modèle ne peut être appellé: "L`Afrique aux africains", car l`Afrique
aura tendance à dependre dans son secteur secondaire et technologique
des produits qui lui viennent de l`exterieur, sans pour autant
avoir peur de cela, car comme je viens de le prouver ci-haut que:
"Le développement économique d'un pays ou d'une région n'est plus
tributaire du développement du secteur secondaire soit l'industrie lourde."
 
 
Sur la qualité maintenant...
 
Je commence par vous dire que la vente des produits à bas coût et de
qualité mediocre des chinois ou d`autres ne va pas durer longtemps,
car l`amelioration des indicateurs economiques de l`Afrique ou d`autres
regions du même type se fait rapidement, car l`Afrique a compris que:
 
"Les modèles économiques élaborés par les économistes du développement
des années 60, fondés sur l'idée des industries industrialisantes,
semblent de plus en plus perdre de leurs adeptes inconditionnels. Le
développement économique d'un pays ou d'une région n'est plus tributaire
du développement du secteur secondaire soit l'industrie lourde."
 
Lisez le tout ici dans le journal l'Economiste:
 
http://www.leconomiste.com/article/915791-la-conqu-te-conomique-de-l-afrique-passe-par-le-secteur-des-servicespar-m-fadel-el-ha
 
 
Donc puisque les indicateurs economiques de l`Afrique s`ameliorent
rapidement, alors le principe que je vous ai dit qui est le suivant sera
vrai dans pas longtemps pour l`Afrique aussi, le revoici:
 
Revenons si vous voulez bien sur la Loi de l`offre
et la demande, cette Loi a quelque chose d`intrinséque c`est que
l`offre est forcée par une probabilité superieure d`offrir
une meilleur qualité par peur de la punition de la demande..
 
Alors notons bien que l`espace echantionnal en mathematique de
probabilité est que les trois evenements suivants se realisent:
le premier evenements est que la demande exige une qualité
moyenne et que le deuxième evenement c`est que la demande exige une
qualité superieure et que le troisième evenement c`est que la demande
exige une qualité mediocre, alors à mon avis l`evenement qui l`emporte
majoritairement c`est l`union des evenements suivants: l`Evenement de
la demande qui exige une qualité superieure et l`evenement de la demande
qui exige une qualité moyenne, mais cela ne s`arréte pas là, puisque
l`offre raisonne d`une manière probabilistique puisque la demande a une
tendance à exiger une qualité meilleur.
 
Je vais maintenant vous expliquer la Loi de l`offre et de la demande
dans le Liberalisme avec de la mathematique de probabilité en utilisant
une probabilité conditionnelle interessante, mais pour revenir à la
probabilité:
 
La probabilité d`un evenement sur un espace echantilonnal c`est
aussi une probabilité conditionelle:
 
Car notons S l`espace echantilonnal.
 
Et E un evenement qui engendre un sous-ensemble à l`interieur de cet
espace echantionnal S.
 
Alors on peut calculer P(E) = n(E)/n(S)
 
mais aussi cela est une probabilité conditionnelle:
 
car P(E) = P(E | S) = n(intersection_de(E,S))/n(S), et cela
est egale à n(E)/n(S)
 
Et pour l`offre donc, dans la Loi de l'offre et la demande, elle a à
evaluer la probabilité conditionnelle de: P(reussir à vendre |
l`evenement de la demande a tendance à exigée une meilleur qualité), et
cette probabilité est superieure, car l'espace echantilonnal en
mathematique de probabilité devient le: en sachant que l`evenement de la
demande a tendance à exigée une meilleur qualité, qui est vraiment
grand, donc la Loi de l`offre et de la demande a tendance a reguler la
qualité vers une meilleur qualité.
 
 
Maintenant je passe à l`essence de la qualité...
 
 
Vous m`avez-vue vous parler de qualité qui créee le problème
de la recherche du maximum global , comme chez le Liberalisme,
et voici ma demonstration logique sur cela:
 
Sur le problème de la recherche du maximum global qui se retrouve
dans le Liberalisme et dans le nazisme etc. car les nazis voulaient
optimiser mieux leur société en ayant même recours à de la violence
et donnant de la priorité à la performance, comme dans le Liberalisme
qui à tendance à donner de la priorité à la performance
Ramine <ramine@1.1>: Nov 05 03:41PM -0400

Sorry, i have posted in the wrong group.
Mr Flibble <flibbleREMOVETHISBIT@i42.co.uk>: Nov 05 07:48PM

On 05/11/2016 19:41, Ramine wrote:
 
> Sorry, i have posted in the wrong group.
 
You are a fucking liar; why don't you do us all a favour and turn your
Usenet spambot off?
 
/Flibble
bleachbot <bleachbot@httrack.com>: Nov 05 08:41PM +0100

bleachbot <bleachbot@httrack.com>: Nov 05 08:41PM +0100

Popping mad <rainbow@colition.gov>: Nov 05 03:41PM

I've been trying to create some custom system libraries with templating
and it surprised me when I starting to get linking problems. Generally I
create a .h file and a .cpp file and develop objects which can later be
developed into shared libraries. Years ago I did quite a bit of work
with C++ and libraries and I don't recall having this problem, but looking
back at the code, I see I was cramming a lot of class definitions directly
into the .h file. So I must have hit this snag before but I don't
remember it.
 
You'll have to excuse me if I sound a little vague on this problem I am
having, but it is very complicated and I'm slow at getting my head around
this issue. And it seems to affected somehow by name space.
 
I'm looking over the text by Vandevoorde and Josuttis, "C++ Templates The
complete guild, 12th printing in June of 2010 and copyrighted in 2003.
They seem to sum up the problem fairly well, although there explanation
is a bit cryptic to me. Section 6.1.1 and 6.1.2 on pages 63 after show
some sample code of a 3 file break out of C++ code they write:
 
A C++ compiler will most likely accept this program
without any problems, but the linker will probably
report an error, implying that there is no definition
for the function print_typeof()...
 
(adlib) for a common solution...
We include the defintions of a template in the header
file that declares that template.. For our example,
we can do this by adding
 
#include "myfirst.cpp"
 
at the end of myfirst.cpp in every do-C file that uses
the template. A third way, or course, is to do away
with myfirst.cpp and rewrite myfirst.hpp so that it
contains all template declarations and template
definitions.
 
 
Ugg. So I'm looking over old code that I wrote and it seems that
namespace influences the result of this, at least with gcc on GNU.
 
In this file here, I seem to be having no problem creating templated
objects in a .cpp file, but everything is being dumped the std namespace
 
http://www.nylxs.com/docs/workshops/linklist_templates/linklist.cpp.html
 
1 #include "linklist.h"
2 #include <iostream>
3
4 using namespace std;
5
6 template<class unk>
7 NODE<unk>::~NODE<unk>(){
8 //cout << "List Item Destroyed" << endl;
9
10 }
11
12
13
14
15 template<class unk>
16 void LIST<unk>::remove_front(){
17 if(_at_front == 0){
18 cout << "No List" << endl;
19 return;
20 }
21 NODE<unk> * tmp = _at_front;
22 down_size();
23 _at_front = tmp->next();
24 if(tmp->next() == NULL)
25 _at_end = 0; //need to clear _at_end as well once
you delete the last node
26
27
28 delete tmp;
29 return;
30 }
31
 
 
The code I'm working on currently is less fortunate. I created a
namespace for it
 
 
~~nodes.cpp
 
#include "nodes.h"
#include <iostream>
using namespace std;
template<class unk>
tree::NODE<unk>::NODE( unk states, NODE<unk> *cl, NODE<unk> *cr, NODE<unk>
*p ){
cout << "Im here" << endl;
}
 
template<class unk>
tree::NODE<unk>::~NODE<unk>(){
};
~~~~
 
|| g++ -Wall -ggdb -c nodes.cpp
nodes.cpp|5 col 1| error: 'tree' does not name a type
|| tree::NODE<unk>::NODE( unk states, NODE<unk> *cl, NODE<unk> *cr,
NODE<unk> *p ){
|| ^~~~
nodes.cpp|10 col 1| error: 'tree' does not name a type
|| tree::NODE<unk>::~NODE<unk>(){
|| ^~~~
make: *** [makefile|8| nodes.o] Error 1
 
before this, it was saying it couldn't find definitions of my templates
in this file. I did a circular thing and included, as per what it said
in the text,
 
#include node.cpp
 
in file node.h
 
/*
*
=====================================================================================
*
* Filename: nodes.h
*
* Description: description of phylogentic nodes as per
* Fitch and Sannkoff as describd by Felenstein
*
* Version: 1.0
* Created: Nov 4 21:15:49 EDT 2016
* Revision: none
* Compiler: gcc
*
* Author: Ruben Safir,
* Company: LIU Thesis
*
*
=====================================================================================
*/
#ifndef NODES_H
#define NODES_H
#include<iostream>
#include<string>
#include<vector>
#include "nodes.cpp"
namespace tree {
 
 
/*
==============================================================================
* Class NODE -
* Description - This is a node in the tree that must undergo parsimony
evaluation
*
================================================================================
*/
 
 
Now the namespace issue is cropping up.
"Alf P. Steinbach" <alf.p.steinbach+usenet@gmail.com>: Nov 05 06:51PM +0100

On 05.11.2016 16:41, Popping mad wrote:
> back at the code, I see I was cramming a lot of class definitions directly
> into the .h file. So I must have hit this snag before but I don't
> remember it.
[snip]
 
> Now the namespace issue is cropping up.
 
You don't have a namespace-related problem, or if you have one it's
unrelated.
 
The problem is simply that in order to instantiate a template with given
template arguments, the full textual definition must be available to the
compiler.
 
If you compile the template definitions separately, then you can only
instantiate them in the translation unit where you define them (because
here the textual definitions are available), and this means
instantiating them for a fixed number of possible types. They can be
used with these arguments in other TUs. But any other arguments, and the
linker will complain of lacking instantiations.
 
So usually templates are fully defined in headers.
 
E.g. much of Boost are template based header-only sub-libraries.
 
 
• • •
 
C++98 and C++03 had an `export` feature to deal with separate
compilation of template definitions.
 
Unfortunately, as I recall it was only ever implemented by Comeau and
(with an undocumented option to activate it) in the Intel compiler.
 
`export` was removed in C++11.
 
• • •
 
Rumours have long been that this will be fixed again "when" C++ gets
modules, and that's also rumoured to fix the extreme build times and
much else. E.g. Microsoft dismissed my suggestion of how to improve
build times because, hey, modules will fix all that. And Visual C++ does
have experimental module support already, but I don't know whether it
fixes build times, or deals with templates, or what.
 
 
Cheers & hth.,
 
- Alf
ruben safir <ruben@mrbrklyn.com>: Nov 05 02:49PM -0400

On 11/05/2016 01:51 PM, Alf P. Steinbach wrote:
> translation unit
 
 
what is that...exactly.
Ben Bacarisse <ben.usenet@bsb.me.uk>: Nov 05 07:21PM


> On 11/05/2016 01:51 PM, Alf P. Steinbach wrote:
>> translation unit
 
> what is that...exactly.
 
"The text of the program is kept in units called source files in this
International Standard. A source file together with all the headers
(17.6.1.2) and source files included (16.2) via the preprocessing
directive #include, less any source lines skipped by any of the
conditional inclusion (16.1) preprocessing directives, is called a
translation unit."
 
--
Ben.
"Rick C. Hodgin" <rick.c.hodgin@gmail.com>: Nov 04 08:09PM -0700

On Friday, November 4, 2016 at 6:28:29 PM UTC-4, Real Troll wrote:
 
> > is almost as annoying as replying to a Usenet post with just:
 
> > +0
 
> > Usenet isn't Stack Overflow so stop wasting bandwidth.
 
Absolutely. And it's equally wasteful in terms of screen real-estate
to, for example, double-space every single line of a post.
 
> Did you get the permission from Rick Hodgin to post this? Why did you
> not mention Jesus Christ in your post?
 
-2. :-)
 
Best regards,
Rick C. Hodgin
Gareth Owen <gwowen@gmail.com>: Nov 05 02:50PM


> is almost as annoying as replying to a Usenet post with just:
 
> +0
 
> Usenet isn't Stack Overflow so stop wasting bandwidth.
 
+i
bitrex <bitrex@de.lete.earthlink.net>: Nov 05 02:48PM -0400

On 11/04/2016 06:14 PM, Mr Flibble wrote:
 
> +0
 
> Usenet isn't Stack Overflow so stop wasting bandwidth.
 
> /Flibble
 
Hi I like C++11
"Rick C. Hodgin" <rick.c.hodgin@gmail.com>: Nov 05 11:50AM -0700

On Saturday, November 5, 2016 at 2:49:05 PM UTC-4, bitrex wrote:
> > +0
 
> > Usenet isn't Stack Overflow so stop wasting bandwidth.
 
> Hi I like C++11
 
I like your answer, bitrex. It goes to eleven.
 
Best regards,
Rick C. Hodgin
Dombo <dombo@disposable.invalid>: Nov 05 08:05PM +0100

Op 04-Nov-16 om 23:14 schreef Mr Flibble:
 
> +0
 
> Usenet isn't Stack Overflow so stop wasting bandwidth.
 
> /Flibble
+1
"Christopher J. Pisz" <cpisz@austin.rr.com>: Nov 05 03:46AM -0500

I am reading about the "copy and swap idiom" online, which is new to me.
 
I desire to derive from std::runtime error in order to make my own
exception that also contains filename, line, and time it was created.
 
I do not see a move constructor, or a swap for any of the std
exceptions. Are there any?
 
Do I just not worry about "the rule of 5" here and stick to the "rule of
3" that I do know?
 
I am not sure how I would swap that what() from within a derived class.
"Öö Tiib" <ootiib@hot.ee>: Nov 05 04:34AM -0700

On Saturday, 5 November 2016 10:46:28 UTC+2, Christopher J. Pisz wrote:
> I am reading about the "copy and swap idiom" online, which is new to me.
 
Whatever it is they write about they often praise it but forget
to mention the important limitations.

> I desire to derive from std::runtime error in order to make my own
> exception that also contains filename, line, and time it was created.
 
Note that "copy and swap" won't typically make sense on case of
dynamically polymorphic object hierarchy like 'std::exception'.
You will get objects sliced if you swap within such hierarchy using
base classes.
 
 
> I do not see a move constructor, or a swap for any of the std
> exceptions. Are there any?
 
No. Also compiler may not make those implicitly.
 
 
> Do I just not worry about "the rule of 5" here and stick to the "rule of
> 3" that I do know?
 
> I am not sure how I would swap that what() from within a derived class.
 
I am not sure why the copy constructor of 'std::exception' is not
'protected' and copy assignment '= delete'. Perhaps there was
something about exceptions that I have forgotten. Why you copy
exceptions? I just throw and catch const references to those.
 
The usual rule about dynamically polymorphic stuff is that we use
it through additional indirection.
When we need to swap or to assign such then we swap or assign owning
pointers or smart pointers and we do not assign nor copy nor swap
the object itself.
When we really need to dynamically create polymorphic copy of actual
objects (rare case) then we add virtual 'clone' function to the
whole hierarchy.
Paavo Helde <myfirstname@osa.pri.ee>: Nov 05 03:32PM +0200

On 5.11.2016 10:46, Christopher J. Pisz wrote:
> exception that also contains filename, line, and time it was created.
 
> I do not see a move constructor, or a swap for any of the std
> exceptions. Are there any?
 
Copying exceptions is in general complicated because one typically does
not know the dynamic type of the exception and there is no base class
nor a virtual clone function in the base class.
 
Fortunately, there is actually no need to copy exceptions as the
exception objects are logically immutable. Instead one can create
smartpointers to the exception object which can be freely copied, sent
over to other thread, etc:
 
try {
// ...
 
} catch(...) {
std::exception_ptr p1 = std::current_exception();
std::exception_ptr p2 = p1;
// ...
}
 
hth
Paavo
jon@cppcon.org: Nov 05 10:38AM -0700

On Saturday, November 5, 2016 at 4:34:49 AM UTC-7, Öö Tiib wrote:
> 'protected' and copy assignment '= delete'. Perhaps there was
> something about exceptions that I have forgotten. Why you copy
> exceptions? I just throw and catch const references to those.
 
Catching by reference is the correct thing to do, but the standard requires that exceptions be copyable. The expression "throw Foo{};" implies a copy (although compilers are free to elide this copy).
jon@cppcon.org: Nov 05 10:40AM -0700

On Saturday, November 5, 2016 at 6:32:49 AM UTC-7, Paavo Helde wrote:
> nor a virtual clone function in the base class.
 
> Fortunately, there is actually no need to copy exceptions as the
> exception objects are logically immutable.
 
Exception objects are not necessarily immutable. See boost::exception for an important use case involving modifying exceptions.
"Alf P. Steinbach" <alf.p.steinbach+usenet@gmail.com>: Nov 05 07:08PM +0100

On 05.11.2016 09:46, Christopher J. Pisz wrote:
> exception that also contains filename, line, and time it was created.
 
> I do not see a move constructor, or a swap for any of the std
> exceptions. Are there any?
 
Nope.
 
A standard library exception class is guaranteed copyable, but not movable.
 
When you add state to a non-swappable class you can design that state as
an object with its own copy assignment operator, that uses the copy and
swap idiom. Then for the exception object that this state is part of,
just let the compiler create a default copy assignment operator.
 
 
> Do I just not worry about "the rule of 5" here and stick to the "rule of
> 3" that I do know?
 
You don't have to provide move semantics for your extra state, because
it will not be moved.
 
 
> I am not sure how I would swap that what() from within a derived class.
 
Not sure what you mean here, sorry.
 
 
Cheers & hth.,
 
- Alf
"Öö Tiib" <ootiib@hot.ee>: Nov 05 11:33AM -0700


> Catching by reference is the correct thing to do, but the standard
> requires that exceptions be copyable. The expression "throw Foo{};"
> implies a copy (although compilers are free to elide this copy).
 
That expression is likely eliding copying most derived type Foo
to object of same type. So that seemingly does not illustrate at all
how and what OP is there planning to "copy and swap".
Popping mad <rainbow@colition.gov>: Nov 05 06:15AM

I have a class that is a template class
 
template<class cost>
class state
{
public:
/* ==================== LIFECYCLE ======================================= */
/* constructor */
explicit inline state<cost>(std::string const a, cost r)//r is the current minimal state for a node
:_nam{a}, _r{r}
{};
 
 
/* ==================== ACCESSORS ======================================= */
inline std::string nam(){return _nam;};
inline cost r(){return _r;};
//once it is set it is set
//inline void nam(std::string a ){_nam = a;}
inline void r(cost b ){_r = b;}
/* ==================== MUTATORS ======================================= */
 
/* ==================== OPERATORS ======================================= */
 
/* ==================== DATA MEMBERS ======================================= */
protected:
 
private:
std::string _nam;
cost _r;
 
}; /* ----- end of class State ----- */
 
 
I want to use it for a vector type in another class. In order to do this, I seem to have to make the second class
also a template, which doesn't seem right. But I have to knwo the unknow template type prior to constructing the vectors
 
 
 
/*
* =====================================================================================
* Class: Pstates
* Description: vector of all possible states
* =====================================================================================
*/
 
template<class cost>
class Pstates
{
public:
 
/* ==================== LIFECYCLE ======================================= */
inline explicit Pstates (std::vector< state<cost> > x)
:_vstate{x}{}; /* constructor */
inline ~Pstates (){delete _vstate; }; /* destructor */
 
/* ==================== ACCESSORS ======================================= */
 
/* ==================== MUTATORS ======================================= */
 
/* ==================== OPERATORS ======================================= */
 
const Pstates& operator = ( const Pstates &other ); /* assignment operator */
 
/* ==================== DATA MEMBERS ======================================= */
protected:
 
private:
std::vector<state <cost> > _vstate;
 
}; /* ----- end of class Pstates ----- */
 
 
 
 
Am I doing this wrong? And do I need to use Pstates<cost> in the constructor?
Paavo Helde <myfirstname@osa.pri.ee>: Nov 05 10:34AM +0200

On 5.11.2016 8:15, Popping mad wrote:
> std::string _nam;
> cost _r;
 
> }; /* ----- end of class State ----- */
 
 
The 'inline' is redundant in this example, it is just adding noise.
 
Using 'cost' for a template type parameter seems disconcerting. To me,
'cost' is something which has e.g. value 12, not something which has a
value like a type 'int'. Maybe it should be named smth like
CostCalculationPolicy?
 
 
> I want to use it for a vector type in another class. In order to do this, I seem to have to make the second class
> also a template, which doesn't seem right. But I have to knwo the unknow template type prior to constructing the vectors
 
A template is not a class. Template is a compile-time prescription for
making many classes. You cannot put templates into some concrete
std::vector as the templates exist only at compile time and a concrete
instance of std::vector exists only at run time.
 
Indeed, what you can do is to make another prescription (template) which
prescribes how to use your abstract class template with another abstract
class template (std::vector). It appears this is what you have.
 
Another option is to fix the template parameter, so that you get an
instantiated actual class:
 
void foo() {
std::vector<state<int>> vstate;
// vstate is an instance of a concrete class
}
 
At some point one needs to fix the template types anyway, otherwise the
program would not be able to do anything at run-time. It's up to you
where and how to do that, in principle the whole program could be
templates and main() could contain a single instantiation of them.
 
HTH
Paavo
 
Popping mad <rainbow@colition.gov>: Nov 05 02:20PM

On Sat, 05 Nov 2016 10:34:33 +0200, Paavo Helde wrote:
 
> The 'inline' is redundant in this example, it is just adding noise.
 
Thank you Paavo/ Why is it redundent here?
 
 
> Using 'cost' for a template type parameter seems disconcerting. To me,
> 'cost' is something which has e.g. value 12, not something which has a
> value like a type 'int'.
 
Like a constant instead of a template value? Why do you say that? FWIW, this
is supposed to eventually do the Fitch/Sankoff algorithm for Phylogenetics. I want
to template it so that I can cook up different mechanism for cost determination
on the same scafling of this work, and do some comparing.

> Maybe it should be named smth like
> CostCalculationPolicy? <== i really don't like long variable names. It is not
really the policy though, but the numeric value. I'm starting with ints, but I can
see possible needs for using floats later, or even get more flexible. I do see your
point though.
 
Quote<<A template is not a class. Template is a compile-time prescription for
making many classes. You cannot put templates into some concrete
std::vector as the templates exist only at compile time and a concrete
instance of std::vector exists only at run time.>>
 
What I thought would happen is that the compiler would substitute in the code,
first for the inner template, and then for the outer one, but I suppose that would
mean the g++ needs to do multiple passes in the compile, which it may, or may not do.
vector is also a template so it is also in existence on at compile time?
 
Is that right? Is there really no creation of a datatype called vector on compilation?
Are vectors run time embodiment in the stack, or on the heap
 
Quote<< Indeed, what you can do is to make another prescription (template) which
prescribes how to use your abstract class template with another abstract
class template (std::vector). It appears this is what you have.>>
 
Yeah I thought the compiler would pick that up without the explicit direction.
This is a big limitation.
 
Quote
<<Another option is to fix the template parameter, so that you get an
instantiated actual class:
 
void foo() {
std::vector<state<int>> vstate;
// vstate is an instance of a concrete class
}
 
I think you lose your flexibility with state in that case.
Paavo Helde <myfirstname@osa.pri.ee>: Nov 05 05:03PM +0200

On 5.11.2016 16:20, Popping mad wrote:
> On Sat, 05 Nov 2016 10:34:33 +0200, Paavo Helde wrote:
 
>> The 'inline' is redundant in this example, it is just adding noise.
 
> Thank you Paavo/ Why is it redundent here?
 
If you define a member function inside the class definition, it is
implicitly considered 'inline'.
 
> class template (std::vector). It appears this is what you have.>>
 
> Yeah I thought the compiler would pick that up without the explicit direction.
> This is a big limitation.
 
It looks like you have some conceptual confusion about what are C++
templates and when one can and should use them. Saying that there are
"big limitations" is like saying that human ear has big limitations
because it does not distinguish colors.
 
> // vstate is an instance of a concrete class
> }
 
> I think you lose your flexibility with state in that case.
 
I see you snipped the most important part of my post where I mentioned
that in some point in your code you must fix your types and instantiate
the templates. If this does not suite your code, then maybe you should
not use templates in the first place, but for example run-time
polymorphism (derived classes and virtual functions).
 
hth
Paavo
You received this digest because you're subscribed to updates for this group. You can change your settings on the group membership page.
To unsubscribe from this group and stop receiving emails from it send an email to comp.lang.c+++unsubscribe@googlegroups.com.

No comments: