OpenLLM-France/wikimedia huggingface dataset:
# Making New Friends
### Intent

To simplify creation of friend functions for a class template.

### Motivation

Friend functions are often used to provide some auxiliary additional interfaces for a class. For example, insertion (<<), extraction (>>) operators and overloaded arithmetic operators are often friends. Declaring friend functions of a class template is a little more complicated compared to declaring a friend function for a non-template class. There are four kinds of relationships between classes and their friends when templates are involved:
* One-to-many: A non-template function may be a friend to all template class instantiations.
* Many-to-one: All instantiations of a template function may be friends to a regular non-template class.
* One-to-one: A template function instantiated with one set of template arguments may be a friend to one template class instantiated with the same set of template arguments. This is also the relationship between a regular non-template class and a regular non-template friend function.
* Many-to-many: All instantiations of a template function may be a friend to all instantiations of the template class.
The one-to-one relationship is of interest here because setting that up in C++ requires additional syntax. An example follows.
The above example is no good for us because the inserter is not a template but it still uses a template argument (T). This is a problem since it’s not a member function. The operator<<( ) must be a template so that distinct specialization for each T can be created.
Solution here is to declare a insertion operator template outside the class before friend declaration and adorn the friend declaration with <>. It indicates that a template declared earlier should be made friend.
A disadvantage of the above solution is that it is quite verbose.

### Solution and Sample Code

Dan Saks suggested another approach to overcome the verbosity of the above solution. His solution is known as "Making New Friends" idiom. The idea is to define the friend function inside the class template as shown below.
Such a friend function is not a template, but the template acts as a factory for "making" new friends. A new non-template function is created for each specialization of Foo.

### References

C++ FAQ 35.16
# More C++ Idioms/Handle Body Hierarchy
## Also Known As

The Body

## References

http://users.rcn.com/jcoplien/Patterns/C++Idioms/EuroPLoP98.html#HandleBodyHierarchy
# Implicit conversions
### Intent

Implicit conversions are performed whenever an expression of some type T1 is used in context that does not accept that type, but accepts some other type T2.

### Motivation

In some contexts a variable can be used which is not exactly the type required by the function. In particular:
* when the expression is used as the argument when calling a function that is declared with T2 as parameter;
* when the expression is used as an operand with an operator that expects T2;
* when initializing a new object of type T2, including return statement in a function returning T2;
* when the expression is used in a switch statement (T2 is integral type);
* when the expression is used in an if statement or a loop (T2 is bool).
The program is well-formed (compiles) only if there exists one unambiguous implicit conversion sequence from T1 to T2.
More info on: C++ Reference en.cppreference.com implicit_conversion

### Solution and Sample Code

Conversion of pointer to boolean:
Conversion of std::string to some other type:
Example comes from this Stack overflow question titled: C++ implicit conversions.

### Known Uses

Everywhere, all the time, ...
# Interface Class
### Intent

* To separate an interface of a class from its implementation.
* Invoke implementation of an abstraction/class using runtime polymorphism.

### Motivation

Separating an interface of a class from its implementation is fundamental to good quality object oriented software design/programming. For object oriented programming, the principal mechanism of separation is the Interface Class. However C++ (when compared to, say, Java) provides no exclusive mechanism for expressing such a separation. In Java, interface keyword is used to specify only the public methods that are supported by an abstraction. C++ does not have such a keyword but its functionality can be expressed closely using the Interface Class idiom. The idea is to express only the public methods of an abstraction and provide no implementation of any of them. Also, lack of implementation means no instances of the interface class should be allowed.

### Solution and Sample Code

An interface class contains only a virtual destructor and pure virtual functions, thus providing a construct similar to the interface constructs of other languages (e.g. Java). An interface class is a class that specifies the polymorphic interface i.e. pure virtual function declarations into a base class. The programmer using a class hierarchy can then do so via a base class that communicates only the interface of classes in the hierarchy.
Every interface class should have a virtual destructor. Virtual destructor makes sure that when a shape is deleted polymorphically, correct destructor of the derived class is invoked. Otherwise there is a good chance of resource leak. Benefit of expressing design using interface classes are many:
* New shape abstractions can be added without changing the code that depends only on shape interface. For example, Square can inherit from shape and implement the interface methods in its own way. The function main needs no changes at all.
* Separation of interface from implementation prevents recompilation of parts of the program that depend only on the interface classes.
* Dependency Inversion Principle (DIP) states that implementation classes should not depend on each other. Instead, they should depend on common abstraction represented using an interface class. DIP reduces coupling in a object-oriented system.

### Known Uses

Nearly all good object-oriented software in C++!

### Related Idioms

* Capability Query
* Inner Class
* Non-Virtual Interface
* Function Poisoning

### References

C++ Interface Classes - An Introduction
# Observing the Sky from 40°N/Sky maps/August 1, 10:00 pm

Celestial map for August 1, 10:00 pm, from 40°N. North is up and South is down. On the left there is the detailed map, on the right there is an illustration of the sky as it appears.
# Observing the Sky from 40°N/Sky maps

The first page contains the maps of the Northern and the Southern celestial hemisphere. Follow the pages for the monthly maps.
* Northern and Southern Hemisphere
* January 1, 10:00 pm
* January 15, 10:00 pm
* February 1, 10:00 pm
* February 15, 10:00 pm
* March 1, 10:00 pm
* March 15, 10:00 pm
* April 1, 10:00 pm
* April 15, 10:00 pm
* May 1, 10:00 pm
* May 15, 10:00 pm
* June 1, 10:00 pm
* June 15, 10:00 pm
* July 1, 10:00 pm
* July 15, 10:00 pm
* August 1, 10:00 pm
* August 15, 10:00 pm
* September 1, 10:00 pm
* September 15, 10:00 pm
* October 1, 10:00 pm
* October 15, 10:00 pm
* November 1, 10:00 pm
* November 15, 10:00 pm
* December 1, 10:00 pm
* December 15, 10:00 pm
# Observing the Sky from 40°N/Sky maps/April 15, 10:00 pm

Celestial map for April 15, 10:00 pm, from 40°N. North is up and South is down. On the left there is the detailed map, on the right there is an illustration of the sky as it appears.
# Observing the Sky from 40°N/Sky maps/December 1, 10:00 pm

Celestial map for December 1, 10:00 pm, from 40°N. North is up and South is down. On the left there is the detailed map, on the right there is an illustration of the sky as it appears.
# Observing the Sky from 40°N/Sky maps/December 15, 10:00 pm

Celestial map for December 15, 10:00 pm, from 40°N. North is up and South is down. On the left there is the detailed map, on the right there is an illustration of the sky as it appears.
# Observing the Sky from 40°N/Sky maps/April 1, 10:00 pm

Celestial map for April 1, 10:00 pm, from 40°N. North is up and South is down. On the left there is the detailed map, on the right there is an illustration of the sky as it appears.
# Observing the Sky from 40°N/Sky maps/August 15, 10:00 pm

Celestial map for August 15, 10:00 pm, from 40°N. North is up and South is down. On the left there is the detailed map, on the right there is an illustration of the sky as it appears.
# Observing the Sky from 40°N/Sky maps/February 1, 10:00 pm

Celestial map for February 1, 10:00 pm, from 40°N. North is up and South is down. On the left there is the detailed map, on the right there is an illustration of the sky as it appears.
# Novial

In this special part I venture to sketch the new Interlanguage which I have tried to construct on the basis of a lifelong study of various national languages and a study begun in 1903 of the best schemes of artificial languages. I have found the problem an extremely complicated one, and cannot pretend in every detail to have hit upon the best solution. My attitude has been the scientific one of not issuing ukases, but rather of stating arguments wherever I deviate from my predecessors. To these I owe, of course, a great debt, both for showing me practicable roads and negatively for striking paths which to my mind would land us in impasses. I might have contented myself with criticizing previous schemes and throwing out some scattered new proposals, but I have thought it more valuable to show how my ideas fit together as an aggregate whole: I have therefore given a sufficient number of specimens for the reader to form an idea of the looks and sounds of the first interlanguage ever framed by a professional philologist. Among novel features I may mention the perfect agreement in flexion between between substantives and pronouns, the use of the ground-form of verbs even in the perfect and passive, the elimination of c and z, and the e/a/o-words. Some of my suggestions may be accepted singly and worked into other schemes, but others are so intimately knit together that they must be taken or rejected jointly. Though I have tried to work as far as possible on scientific lines, i.e. objectively, it has not been possible totally to exclude individual tastes and preferences; my hope is that thing which at first may look unpleasant will be found less so on closer inspection; that, at any rate, has been my own experience with some of my forms. In regard to some points I have hesitated a good deal before deciding on the form here proposed, and am perfectly willing to accept criticism and new suggestions: though, as I have said in Part I, we are approaching a period of agreement on the principle of language-construction, that period has not yet arrived, and interlinguists must therefore show the widest toleration of each other's systems and provisionally admit alternative forms, which will have to be tested thoroughly in practice before the bad ones are weeded out finally. I shall be happy if it is recognized that I have contributed in some slight measure to bring about the victory of the idea in general and to give its final shape to the International Auxiliary Language of the future. In this part the following abbreviations have been used:
D = German (Deutsch).
E = English.
F = French.
I = Italian.
L = Latin.
P = Portuguese.
Po = Polish.
R = Russian.
S = Spanish.
Sc = Scandinavian.
Esp = Esperanto.
N = Novial.
Occ = Occidental.
Z = Zamenhof, i.e. Esperanto.
adj = adjective.
adv = adverb.
sb = substantive.
vb = verb.
# Novial/AIL Number of proposed
## Number of Proposed Languages

A criticism which is much more serious in its consequences is this: people will never agree on one single artificial language to be used everywhere. A great many interlanguages have been proposed, and new ones spring up on all sides. One of these may be just as good as another, and if some have had a certain vogue and have gathered a troop of adherents, this success has in each case been only temporary, so that each new scheme must be prepared to share the fate of Volapük, which had its heyday of triumph forty years ago and is now totally forgotten.
This objection would certainly be decisive, if the construction of an interlanguage were entirely arbitrary and dependent on an inventor's fancy, and if, on the other hand, the choice between various schemes depended exclusively on the public's whimsical preferences. But fortunately neither of these premises is correct, as we shall see when we cast a glance at the history of the international language movement, and more particularly at its more recent phases.
# Novial/AIL Neuter
## Neuter

For conceptional or national neuter (my Philos. of Grammar, pp. 241 ff.), which is generally rendered in English by means of 'thing' or a circumscription with 'what is', there is no ending in national languages which is sufficiently international to be used for our purposes, and we may therefore go to L -um, which is known from such words as memorandum, ultimatum, magnum, decorum, maximum, minimum, compositum, all of them used in various living languages.
Thus we get verum 'truth', i.e. a true thing (different from the 'abstract' truth vereso, e.g. in 'I doubt the truth of his assertion'), li bonum de ti situatione es ke . . . which is good in that situation is that . . . Vakuum (vakui empty); fortum a fort, stronghold (forti strong); kontributum contribution; falsum.
This neuter may also be used for the names of languages: lo tradukte libres fro germanum en anglum, he translates books from German into English; latinum es tro desfasil por helpelingue.
The chief use of this neuter ending is seen in pronouns: lum it, tum that (that thing), disum this (thing), quum what, quantum how much (as primary), nulum nothing, omnum all, everything, kelkum something, irgum anything, altrum something else, omnum altri = omni altrum everything else.
Note that our languages very often use 'it' (es, il, etc.), where no pronoun is necessary: it rains pluva, it is necessary to start now es nesesari tu starta nun, etc.
It is possible to form inflected forms of -um-words: verumes true things; but as the endings -umes, -umen are clumsy, it is better to use -us, -un: verus, fortus, fabrikatus manufactured things; li fabrikatun boneso. Instead of lumen, lumes 'its they', we may say lun, lus, or better with the common-sex form len, les, which cannot produce any ambiguity: hir es kelki flores: prenda les si vu voli here are some flowers: take them if you like. Me esed in li banke por vida len chefe I was in the bank in order to see its manager.
# Novial/AIL Not so good
## Not so Good as Existing Languages

An objection¹ which is often raised against constructed languages is that they can never be as good as natural languages. It is true that our Interlanguage is not as rich as English, not as elegant as French, not as vigorous as German, not as beautiful as Italian, not as full of nuances as Russian, not as "homelike" as our mother-tongue. But note this well, that all these good qualities, which one appreciates and praises in the national languages, are found only when they are spoken or written by natives. And the Interlanguage may very well be richer than the English spoken by a Frenchman, more elegant than French as spoken by a Dane, more vigorous than the German of some Italians, more beautiful than the Italian of the English, more full of nuances than the Russian of Germans, and more homelike than my own tongue spoken by Russians. And as our language is an auxiliary language, it can only be compared fairly with natural languages as spoken by foreigners; and then neither Ido nor Novial need feel ashamed of itself.
¹ This and the following paragraphs are the translation of the Novial text found below among specimens.
# Novial/AIL Numeral Suffixes
## Numeral Suffixes

For convenience' sake we give the numerals themselves before mentioning the suffixes.
The Romanic numerals are used with a few modifications to make them easier to handle: 1 un (or uni, which is more emphatic), 2 du, 3 tri, 4 quar, 5 sink, 6 six, 7 sep, 8 ok, 9 nin: this is suggested by E nine, Sc ni, nio, D neun, as the Romanic forms nov, non would cause conflict with the words for 'new' and 'not'. 10 dek (dis is 'this'), 100 sent, 1000 mil . . . milione, miliarde (mil miliones), bilione (milione miliones) [not an American billion (DB)].
Un may be used as an indefinite article, but such an article is generally superfluous.
It would be possible to express other numerals simply by combinations like dekdu 12, dudek 20, dudekdu 22, etc. But it is a common experience that people are apt to mistake dekdu for dudek and inversely, and most languages have forms which cannot be so easily mistaken; therefore it is practical for the tens to use the Romanic ending -ANTI (-i because adjectival): 20 duanti, 30 trianti, 40 quaranti, 50 sinkanti, 60 sixanti, 70 sepanti, 80 okanti, 90 ninanti; 23 duanti tri, 99 ninanti nin, etc.
Substantives may be formed in -o; duo, trio, etc., dekduo a dozen, duanto a score. No ambiguity arises from the fact that -o is used here in a different sense from that in Substantival Suffixes.
The Esp system is particularly bewildering for Germans, whose dreizehn means 13, while tridek means 30. Note also the difficulty in dictating long sets of numbers, where 3, 10, 20, 7 may easily be misheard as 30, 27, or 30, 2, 17.
The Ido system of composite numerals (70 sepadek, 17 dekesep) is rather confusing. There is an ingenious system of counting by means of syllables invented by G. de Kolovrat (Les cent syllabes, Nice, 1927): ba 0, be 1, bi 2, bo 3, bu 4--ca 5, ce 6, ci 7, co 8, cu 9--da 10, de 11 . . . fa 15 . . . gi 22 . . . ho 28 . . . ka 35, etc., zu 99; caburi 50462, femina 16750. It would in many ways be advantageous, could these numerals be introduced internationally, but provisionally we must have some system like the above.
The use of cardinal numbers in cases like the year 1927, page 37, chapter X, etc., is not logical, but very convenient; it is found in most of our languages; the French extend it to names of kings, etc., Louis quatorze, and to the days of the month, le quatorze juin. In Russian the more logical ordinals are used even in the indication of years.
Ordinal numbers end in -ESMI: unesmi first, duesmi, sentesmi, etc. 345th trisent-quaranti-sinkesmi. From these we have adverbs in -im: unesmim firstly, in the first place, etc.
Fractions: 100th part sentime (cp. the French coin), half duime, five sixths sink siximes, etc. Prefix mi- = half.
Duopli double, duoplim doubly; in the same way triopli, sentopli, etc.
Distributive adverbs are formed by means of -opim: triopim in threes, three at a time. The same ending is used in pokopim little by little.
# Novial/AIL Objections
## Objections to Constructed Languages

Objections are raised both by professional philologists (linguists) and by laymen. Among the former I must here specially mention the two leaders of German comparative linguistics, Brugmann and Leskien, but their attacks were made at the time when Esperanto was beginning to gain favour, and later languages have avoided not a few of the imperfections found fault with by the two Leipzig professors. In 1925 Professor G. Güntert in his Grundfragen der Sprachwissenschaft tried to reduce the whole idea ad absurdum, but on the basis of so deficient a knowledge of the facts of the case and with so prejudiced a mind that he proved less than nothing. It would be a very great mistake to suppose that professional philologists as a body are against constructed languages; it would be much more correct to say that those among them who have gone most into the question are the best disposed to them. I may mention here among those who have spoken in favour of the idea in abstracto, Schuchardt, Vilh. Thomsen and Meillet - three of the greatest stars in the philological world - and among those who have actually taken part in the International Language Movement, Baudouin de Courtenay, Ernst Kock, Wallensköld, Collinson and Sapir, all of them university professors.
People who hear about constructed languages will often say that such a language must be as lifeless as a dead herring, and that we may just as well think of setting up an homunculus made in a chemical retort and claiming for it the qualities of a living human being. Languages are not organisms, and their "life" is not to be compared with that of animals or plants. Forty years ago Schuchardt was able to make short work of this objection by showing how much in the so-called natural languages was really artificial, that is, due to conscious endeavours and conscious selection, and yet was just as capable of "living" as anything else. What we have to do is to study existing languages and their history so as to find out the actual laws of their development and then build on what has most vitality.
# SAP ERP/Business scenarios

Business scenarios are SAP transactions or strings of transactions, that are performed by business users repeatedly during the normal operations of the system. They include the maintenance of master data (e.g., customers, vendors, materials, employees...) and recording business transactions (purchase orders, invoices, journal entries, etc.)
The prerequisite for executing these scenarios in SAP is, that IT specialists performed certain setup tasks during an implementation project or support assignment.

## Business scenarios by area (module)
### Business scenarios in finance
#### General ledger accounting

Basic scenarios (required almost everywhere):
* Maintain general ledger accounts (Master data)
* Maintain profit centers (Master data)
* Post journal entries
* Clear open items
* Perform period-end closing in general ledger
Advanced scenarios (only used in some companies):
* Park financial documents
* Maintain cash journal
* Create recurring entry documents