C++11 FQA anyone?

isocpp.org announced "the C++ FAQ" to which reportedly Bjarne Stroustrup and Marshall Cline will link to help boost its search rank. Good stuff; also, given that the language is >30 years old – it's about time.

Which reminds me. I'm failing to keep my promise to update the C++ FQA, an overly combative reply to Marshall Cline's fairly combative FAQ, to the new standard from hell – C++11.

Could you perhaps do it instead of me? Unfortunately, explaining how terrible C++ is cannot be made into a career the way explaining how wonderful C++ is can be. So I sort of moved on to other things; I managed to summon the mental energy just that one time to write the C++ FQA, and even as I wrote it I knew that I better hurry because that energy was waning. After all, at work I managed to reduce the amount of C++ I deal with to a minimum, so there was neither a profit motive nor continuous frustration to recharge me.

Not that I haven't made money off the C++ FQA – indirectly I did make money, specifically by getting a headhunter's attention and significantly improving my employment conditions. But I don't think a new FQA's maintainer/co-author could count on something along those lines.

Still, you'd become about as widely famous in narrow circles as I am, getting maybe 200K unique visitors per year and hundreds of "thank you" emails. Most importantly, you'd do the world a great service.

There's a curious double standard in the world of programming languages. Say, PHP is widely ridiculed because, for instance, its string comparison operator converts strings to numbers if they start with "0e" and this results in unexpected behavior. And it doesn't help PHP that === works just fine.

Imagine someone mocking C++ for two char pointers comparing "wrong" with ==. Immediately they'd be told that casting to std::string (more verbose than ===) would work just fine, and that "you just don't get it".

Why is PHP – a language full of quirks which at least gives you memory and type safety – is universally ridiculed and the developers, while defending the language, never ridicule back, while C++, an absolutely insane language, is ridiculed often enough but C++ developers always counter-attack viciously? For that matter, why isn't Lisp ridiculed for EQ, EQL, EQUAL and EQUALP, if comparison operators are so funny?

The reason, IMO, is simple: PHP is not taught in academic CS courses. C++ developers are much more likely to have a CS degree, therefore both they and others treat their knowledge of crazy C++ arcana as something of intellectual value. And Lisp is the poster child of academic programming language development. Educated proponents deter attempts at ridiculing a language.

In a "rational" universe, PHP would be held in high esteem given the amount of output produced by PHP developers with little training. In our universe we have this double- or triple-standard. Pointing out the darker aspects of C++ – which are most of its aspects – thus increases the supply of a rather scarce commodity.

But why C++ and not, say, Lisp, Haskell or C#?

One reason is that C++ is arguably the craziest language in widespread use, combining the safety of C (and I can live with C just fine) with the clarity of Perl (and I can live with Perl peacefully enough). But it is of course subjective.

The thing that really sets C++ apart is its development culture and value system – a perverse amalgamation of down-to-earth shrewdness and idealistic perfectionism. The whole idea of making the best, richest, most efficient and most generic/versatile programming language of the planet – you can sense that Bjarne Stroustrup aims at nothing less – ON TOP OF C is the perfect illustration of this culture, and perhaps its origin.

Stroustrup always knew that the language would be better if it didn't have to be compatible with C and he publicly acknowledged it – the "smaller, much simpler language struggling to come out" remark. But he also knew that using an Embrace, Extend and Exterminate strategy is a much more likely way to succeed. So he did that. In fact he managed to more or less kill C or at least put it in a coma – as even C99, not to mention C11, will never be supported by the Microsoft compiler, and C89 is a really old and really restrictive standard.

A shrewd move – almost an evilly shrewd one – netting the people behind C++ fame and fortune at the expense of programmers dealing with a uniquely dangerous language full of sugar-coated death traps.

(Yes, sugar-coated death traps, you clueless cheerleaders. X& obj=a.b().c() – oops, b() is a temporary object and c() returns a reference into it! Shouldn't have assigned that to a reference. Not many chances for a compiler warning, either.)

Who did things differently? Sun and Microsoft, for example, marketing Java and C#, respectively. They made much cleaner languages from scratch, and to solve the chicken-and-egg problem – we have no legacy projects hence no programmers hence no new projects hence no programmers – they used money, large marketing budgets and large budgets for creating large standard libraries. A much more honest approach yielding much better results, I find.

And Stroustrup says about himself that he "lacks marketing clout" and says Java and C# are bad for you because they're "platforms, not languages", whatever that means.

And I'm not claiming to be able to read minds, but if I had to bet – I'd say he really believes that. He probably thinks he's your altruistic benefactor and Java and C# are evil attempts to drag you into proprietary platforms.

And you can see the same shrewdness, the same "altruism", the same attention to detail, the same tunnel vision – "this shit I'm working on is so important, it deserves all of my mental energy AND the mental energy of my users at the expense of caring about anything else" – throughout the C++ culture. From the boost libraries to "Modern C++ Design" (the author has since repented and moved to D – or did he repent?..) to the justifications for duplicate and triplicate and still incomplete language features to your local C++ expert carrying his crazy libraries and syntactic wrappers and tangling your entire code base in his net.

And this approach to life – "altruism" plus perfectionism plus cleverness plus shrewdness – extends way beyond C++ and way beyond programming. And the alternative is taming your ambitions.

This was my larger purpose in writing about all this shit. I'm pretty sure I failed in the sense that it got drowned in C++ error messages and other shits and giggles.

So maybe you'll do better than me. If you do, you might contribute to the sanity of many a young idealistic programmer – these tend to get sucked into C++'s sphere of influence, either emerging old and embittered years later or lost to sanity forever, stuck in an internally consistent but absolutely crazy way of thinking.

BTW I never wanted it to be a personal attack, in the sense that (1) I don't know what's inside the heads of people who promote C++ and (2) I can tell you with certainty that if I made something 10 times as bad as C++ and it was 0.0001x as popular as C++, I'd be immensely proud of myself and I wouldn't give a damn about what anyone thought. Just like I don't give a damn about people with so much time on their hands to actually have thousands of karma points at StackOverflow explaining just how lame C++ FQA is.

In this sense, C++ is fine and a worthy achievement of a lifetime. Especially in a world where Putin is a candidate for a Nobel Peace prize and Obama already got one.

I basically just think that (1) C++'s horrible quirks are worth pointing out and (2) there's something to be learned from this story about the way we pave the road to hell with our good intentions. That's all.

***

A lot of people have spoken about "a C++ renaissance" when C++11 was ratified. I tend to agree – indeed the new standard is a fresh doze of the same thing that C++ always was: "zero-overhead" pretty-looking syntax with semantics quite horrendous once you think what it actually means.

Fittingly for a new revision of the C++ standard, more things we could once safely count on have gone with the wind. For instance, anything you could pass to a function used to be an expression, and expressions had one and only one type. How ironic that this revision, the revision that finally capitalized on this fact by introducing auto, also made this fact no longer true: {0} could be an int or an std::initializer_list, depending on the context. Context-dependent types were one thing that Perl had (scalar/vector context) but C++ didn't have.

(I have observed someone do this: _myarr[5]={0}; – they had in the .h file the definition int _myarr[5] and they remembered that this thing could be initialized with {0} in other contexts. What they did wouldn't compile in C++98; in C++11 it promptly assigned the int 0 to the non-existent 5th element of _myarr, and the usual hilarity ensued. Imagine how PHP would be ridiculed for this kind of little behavior – and PHP at least would never overwrite an unrelated variable with garbage. Imagine how with C++, the poor programmer will be ridiculed instead.)

This is nothing, BTW – it's not the kind of thing the FQA would normally poke fun at. We have bigger fish to fry. For instance, C++11's "closures" or "lambdas" – the preposterous thing where you say [](){…} and an anonymous struct gets generated. BTW it's one of the reasons I urged everyone where I work to upgrade to C++11; because it lets you implement a nicely-looking parallel_for. In C I would have added a compiler extension for it AGES AGO but extending the C++ grammar? No sir. I waited patiently until C++11 lambdas.

So, C++11 lambdas. Someone needs to write everything about those hideous capture lists – are references captured by value or by reference?! – and how you can end up passing dangling references if this closure thingie outlives variables it references (we don't need no stinking garbage collection! but why doesn't C++11 let one capture variables by std::shared_ptr?.. It's so much better than gc!), and about the type of this shit and how it looks in debuggers, and about std::function etc. etc.

And this won't be me because frankly, I don't have time to even fully master this arcana anymore.

If you dislike C++ and have the time to write about it, I'll gladly pass the torch on to you; specifically I'll redirect C++ FQA to point to your site, following the example of Bjarne Stroustrup and Marshall Cline. Or we could run a wiki, or something. Email or comment if you're interested.

214 comments ↓

#1 Alex on 03.22.14 at 4:04 pm

I'd love to if I had the time to gain enough depth of knowledge of C++11. But for my professional use of it I try to learn things that work and are safe and automatically being suspicious of the complex and clever.

I've always loved C++ whilst always too thinking it really should never be used for real.

#2 Tom on 03.23.14 at 3:12 am

You know something is wrong when most people are using a tool that is too complex!

#3 Tom on 03.23.14 at 12:36 pm

Yeah, like most people use a computer. Must be something wrong then.

#4 Mate on 03.24.14 at 4:04 am

"PHP [..] a language full of quirks which at least gives you memory and type safety". Except, if you look at the code of PHP you'll know it's *really* not safe. There are so many people sitting on so many PHP zero-days, it would be hard to count. You just have to run it with valgrind/llvm-sanitizer and be amazed. It would be hilarious if it wasn't used by millions, openly exposed to the web.

#5 Yossi Kreinin on 03.24.14 at 1:27 pm

Perhaps you're right; if so I'd guess that say Facebook's PHP implementation is safer. The thing is, PHP the language – which in the long run matters more than the current version of php the standard implementation – makes a safe implementation possible. A memory-safe C++ implementation is only possible in a completely impractical sense – namely if pointers aren't implemented as machine addresses. Of many, many C++ implementations not one ever attempted this over the past decades and for very good reasons.

So you'll keep getting those zero-days forever if people program stuff in C++ that is exposed to attackers. Fortunately, programming in C++ is otherwise so cumbersome and unproductive that few people do such things.

#6 Stefan on 03.25.14 at 1:54 am

Hi,
I really feel sorry reading so many defamations towards the C++ language.
Maybe C++ is a little complex, but is is the only native language out there which is suitable for large projects.
It is no problem to write a image recognition software library in C, or other system-software, but it is IMPOSSIBLE to write large applications in C.
Large applications consist of OBJECTS and C++ provides support for OO. OO modelling of software is way more easy to do than forcing a world of objects into a structured approach.
Maybe in the future D has the chance to replace C++, this too depends on the mayor compiler-vendors.
I really wish the author would take himself the time and LEARN the language and he would not only blame about the fact that he can't read it.
My dear author: Have patience, learn it, use it and LOVE it ;) instead of wasting your energy on hating the unknown.

#7 Xirdus on 03.25.14 at 3:53 am

@Stefan: I think Linus Torvalds would like to have a word with you ;)

#8 Suisei on 03.25.14 at 4:16 am

@Xirdus

If Linus Torvalds wants to have a word with someone, are you his secretary who can arrange a meeting? Will he explain why the C developers working on Linux continue to introduce security bugs in every single release? (An undeniable fact, BTW)

#9 Yossi Kreinin on 03.25.14 at 4:44 am

@Stefan: erm… at what point is someone entitled to claim that he "knows" this shit (which I don't exactly claim but let's say I'm far from a beginner and I would for instance very much doubt that you can read C++ better than me)?

#10 Michael Moser on 03.25.14 at 5:59 am

Thanks for the article

> they used money, large marketing budgets and large budgets for creating large standard libraries. A much more honest approach yielding much better results, I find.

C# and Java are not supposed to be portable to whatever platform there is; they compile to one bytecode format that runs on one virtual machine;
here you have much more assumption of where the shit runs on. Right from the start you have to define a memory model that works with threads, not as an afterthought in version 11.

By not having to be cross platform you can have higher level and more specialized libraries – like thread pools; GUI toolkits or cryptographic libraries. I think that's what he means by 'platforms, not languages';

In C++ they took the 'lowest common denominator' approach, whatever that means.

Also Java and C# had the luxury to avoid some of the mistakes of C++, like multiple inheritance.

#11 Michael Moser on 03.25.14 at 6:03 am

Also are you sure that C has been extinguished?

gcc does c99 and is working on full support of c11; I would dare to say that GCC is bigger than Visual C in this day and age (at least i would not know how to use the bloated development environment of Visual C, even if forced at gunpoint)

#12 Michael Moser on 03.25.14 at 6:32 am

Yet another point: Dangling pointers to stack locations is something that can be done in C, this effect can be achieved without much effort.

Of course C does not have this awful amount of stuff going on implicitly behind the scene and it does not have template headache; however in C you can make a awful mess with long wound precompiler macros (just ask the Linux kernel)

You are right that it C is much more straightforward.
However at this point in time i welcome C++ if the customer pays for it; though you are right that i probably could have done better with the effort that it took to learn it…(sigh).

#13 Michael Moser on 03.25.14 at 6:37 am

Preprocessor macros, not precompiler macro's. And GCC has its own extensions that are not portable to anywhere else. Well at least they took over variadic macros in C99.

#14 Yossi Kreinin on 03.25.14 at 6:37 am

Java and C# could have been native languages (as in gcj or say similarly to D or go which are gc'd but native) and they'd be better in C++ in all the same ways. Also JVM and .NET run on many platforms and it makes very little sense to call C++ not-a-platform but these two things a platform.

Regarding C: a lot of projects want to be portable to VS and hence avoid anything above C89. Not that C was "extinguished" of course, but C++ is very widespread in places where C could be a much better fit.

#15 Tomasz on 03.25.14 at 10:38 pm

In Polish, we have a saying more or less "there's no point in kicking eachother with a horse". C++ is this kind of massive beast, but it is here to stay, together with its mass of fanboys, but also some smart "consultants" (language lawyers).

It is also true what they say – that C++ is "a federation of languages". It really covers a large subset of C, which leaves us the option to stick to "predictable" constructs. There's even std::malloc, std::realloc and std::free – if you don't listen to C++ fanboys and televangelists.

Then there's the "older version of Java" – class hierarchies and polymorphism. You know, all this "a class that has any virtual methods, needs a virtual destructor" stuff. It's mostly pathetic.

Thirdly, templates. This shouldn't be easily dismissed – the Lisp guys can now, in C++11, have all their fun from the good ol years, with variadic templates.
The problem is when you have to port some code from MSVC to G++ and there are unqualified references to dependent types and names.

Right now, because of template abuse, they came up with constexpr. Of that I know little about, but it seems like an acceptable variation on macros and constant folding.

What C++ is unsuitable for, among many many other things, is being an intermediate language (unless it will be in fact C). My colleague has written a C++ code generator for our software, and it was and still is a ton of pain, even for a genius with aspergers like him. We also have another tool, which takes C++ as input (or pretends to), and this is actually impossible without being a full blown compiler frontend (which our tool isn't). One tiny example to show why:

template void f();

const int x = 1;

template <int, x void f() { /* some code to further process */ }

Anyone?

In the end, I try to worry about what C++ does to me. I use it, and it offers me some possibilities and some pain.

(Digression: C++11 is arguably some improvement over C++03… unless you still need to support older compilers and cannot use the plethora of new features, or have to #ifdef them out. Not too much old code goes broken. With Python 3 – this is not the case. And is is being shoveled down the throats of innocent newbies.)

I certainly wish, that there will be either someone, or a collective effort to hoist the FQA standard high, and keep it a source of up-to-date C++ information. Free from dogmas etc.

#16 Tomasz on 03.25.14 at 10:50 pm

The HTML sanitization ate my example. Replace square brackets with agle brackets:

template [typename T, bool b] void f();

const int x = 1;

template [int, x [ 5] f() { /* … */ }

// x < 5 – this is the unbalanced "less than sign".

It comes from C++ philosophy of "keyword? no, let's add a new meaning for an old token." like && for (usually) r-value reference. Unless its in a function or method template after the bare template argument (like T&& – then it can also be a "normal" (l-value) reference. But all readers know this already, right?

#17 Yossi Kreinin on 03.25.14 at 10:59 pm

C++11 is indeed a better thing to upgrade to than Python 3… Sigh.

As to C++ – in Russian we have a saying "nothing is eternal under the moon"…

#18 Tomasz on 03.25.14 at 11:00 pm

I posted an explanation, but forgot to assert that I'm a human. My example got tampered through some HTML sanitization. Imagine square brackets as angle ones:

template [typename T, bool b] void f();

const int x = 1;

template [] void f[int, x [ 5] () { /* … */ }
// unbalanced [

#19 J on 03.26.14 at 4:52 am

I have spent most of my career (short as it has been so far) working with C++, and the FQA was absolutely invaluable to me. Not only for pointing out C++'s (many) potholes to swerve around, but also as a reassurance that no, it's not just me, the language really is that bad. So, thank you, very much, for creating this resource. I can't say I agree with everything in there (e.g. I feel that C++ exceptions, while clearly the worst implementation of the exception feature in any language that I've seen, are slightly better than useless) but seeing a critique of C++ from someone that has had to get deep into the darker corners of the language has resonated with me.

C++ is a language that looks fantastic at first glance, and the deep, fundamental problems don't rear their head until you're working in the "second 90%" of the development effort in a large, multi-developer, multi-hundred-thousand-line project. This is why I now have a deep-seated distrust of developers who really, genuinely like C++. I frequently find that they're the sort of developers who switch projects before the later integration stages, while I generally find myself in the position of desperately trying to clean up the mess. At a glance, Stefan up there fits that description. The tragic part is that he's right that C++ is frequently the only reasonable option for a development project, simply because there's nothing else really available. C++11 (which I've been using here for a couple of years) grinds smooth some of the rougher edges in the language and the standard library (hey, you can finally create a std::fstream using a filename from a std::string, whoopee!) but the deep, underlying problems remain; I never really expected anything different.

#20 Yossi Kreinin on 03.26.14 at 5:31 am

Thanks for your message!

I think the two big things that machines can do to fight C++ is (1) distributed build coupled with incremental linking to make rebuilds tolerable and (2) dynamic instrumentation tools along the lines of Valgrind checking for various errors (unfortunately we're very, very far from a comprehensive dynamic error detection tool for C++). Without these things large projects become incredibly costly to maintain with 50% or even 90% of the time spent fighting the bloody language.

Unfortunately, on top of that, little can be done to make C++ readable except maybe for draconian coding guidelines – something I for one am not very good at.

#21 Richard on 03.26.14 at 5:02 pm

The second Lisp predicate is EQL not EQU and there was a C(indeed not C++) compiler where pointers were not machine addresses: ZetaC which ran on the Symbolics Lisp machines.

#22 Yossi Kreinin on 03.26.14 at 10:58 pm

Thanks for the correction, and as to LispM – let's call it the exception that proves the point (specifically it proved this point by going extinct).

#23 Michael Moser on 03.27.14 at 1:28 am

>Java and C# could have been native languages (as in gcj or say similarly to D or go which are gc'd but native) and they'd be better in C++ in all the same ways

That's because of the preprocessor; with C it gathers one source file with all included headers into one text, compiles it and type checks everything against the intermediate representation;

Java and friends compile one file as is and do type checking of what is known locally in that file, if there is a call to a method of an object that is not known from given information then that call is not type checked at this stage;
Once all other files of a package have been compiled then it can perform type checking of calls from objects declared in the same package; the object signature lookup is conveniently done from class file – the same format that is used to run the stuff (but you can do without that like in D)

So that's another major point where backward compatibility with C is not quite helpful.

#24 Michael Moser on 03.27.14 at 1:30 am

posted too quickly: meant to say that many inconveniences of C++ syntax come from the way it uses the preprocessor.

#25 Nayuki on 03.28.14 at 9:52 pm

> Java and friends compile one file as is and do type checking of what is known locally in that file … if there is a call to a method of an object that is not known

Have you used javac before? When compiling a .java file, the compiler examines every class that is being referenced. If a class has no .class file or its .java file has a later timestamp than its .class file, then that .java file is compiled as well – recursively.

(Btw because of this behavior, javac fits Make's one-file-at-a-time-compilation model very poorly.)

#26 Apprentice on 04.05.14 at 6:53 pm

you are a hero :)

#27 Pete on 04.10.14 at 6:08 am

Yossi, remember the saying "if you want something done right, do it yourself."

It's up to you to update the FQA. (Cline's FAQ hasn't changed that much anyway.)

What else can I say? Your FQA is a great resource. I have it bookmarked and downloaded. I even used to link to it for fun and giggles when helping beginners on the cplusplus.com forums.

I don't do that very much nowadays, because I want to get along with the other members… some of whom openly object to your stated goal of convincing readers that "C++ shouldn't be used" and call your FQA a troll site. After all, it's not my business to defend your FQA.

Anyway, I think your FQA is valuable. It is very organic and warm, and the "oh so it's MY fault" when talking about self-assignment is just one example of that.

#28 Yossi Kreinin on 04.10.14 at 10:47 am

Well… thanks, I guess. "Warm"… I'm sometimes afraid "hot", or hotheaded… Maybe if I toned it down people wouldn't think of it as a troll site.

#29 Jeff on 04.10.14 at 11:02 am

I'm pretty sure in some talk not too long ago Herb Sutter said that they were aiming, finally, for C99 support in Visual C xx. I thought the talk was more recent than July 2013, but that's where searches come up with support for this notion.

#30 BN on 05.09.14 at 9:30 pm

From what I gather, the difference is that C++ is "insane" for a reason (performance/etc) and people who use it generally know this or they would use something else, while php is bad for no particular reason.

#31 Yossi Kreinin on 05.10.14 at 4:34 am

How does C++'s undecidable grammar help with performance, exactly, to take one example of very, very many? The real difference is C++ has all those apologists with Stockholm syndrome while PHP doesn't; also C++'s creator thinks his creation is perfect and wins people over by explaining his rationale at length, making them feel like a language designer through identification with the narrator, while PHP's creator calls himself a "bad programmer" (and Ritchie called C "quirky and flawed", etc.) – note that in reality it's a big question which of the two is the better language implementer.

#32 lmm on 05.12.14 at 2:43 am

Maybe C++ doesn't have to be that way, but there's (as yet) no alternative that absolutely proves it – I mean, most of us have moved on to Java or C# or beyond, but the C++ advocate can still make the case that it's higher-performance (or that you can write libraries that can be called from other languages).

By contrast with PHP we just look at Python or Ruby and see that it could have been better in every way. (I guess you could argue for PHP's faster deployment, but if you're that kind of crazy then mod_python does exist, so it's possible in other languages)

#33 Yossi Kreinin on 05.12.14 at 2:55 am

Well, C is better than C++ for high-performance code so there's your proof… If you want C++ craziness – many people have grown to think of its problems as requirements – then indeed nothing is better than C++. But that is just as true for PHP (as in, only PHP has <?php…)

#34 Pete on 05.18.14 at 12:04 am

How do you argue that "C is better than C++ for high-performance code"?

I can think of two things: the executable file is usually bloated; and there's the overhead of hidden function calls (constructors, destructors, overloaded operators).

Is there anything else you have in mind, Yossi?

#35 Yossi Kreinin on 05.18.14 at 2:23 am

With C you know what's going on (it's not just a question of hidden functions but also say overload resolution/template specialization/binding in general), it compiles faster, etc. See http://yosefk.com/c++fqa/defective.html

#36 HOKUS POKUS on 06.29.14 at 3:37 pm

PHP is ridiculed because its flaws are unacceptable. As a language mainly developed in the late 1990s and early 2000s, it should not have most of the serious flaws that it does have. They are unjustifiable given the state of knowledge when it was developed.

C and C++, on the other hand, pre-date PHP by decades. They were pioneers in the field. In such a situation, mistakes are expected to be made, as nobody had experience about what to avoid.

On top of that, we've seen efforts from the C++ community to help avoid some of the problems that affect it. The faulty aspects may still be around and supported in order to retain compatibility, but there is often new functionality that presents compelling and usable alternatives to faulty functionality. But when it comes to PHP, we've seen very little done to try to address the problems that it suffers from.

C and C++ have flaws because they pushed at the boundaries of knowledge, yet at least some effort has been made to mitigate these. PHP has inexcusable flaws that never should have happened in the first place, and aren't being fixed today.

#37 Yossi Kreinin on 06.29.14 at 5:21 pm

Bullshite.

C++'s grammar is a perfect example of something that was known to be a bad idea when Stroustrup got his CS PhD and yet it's there. PHP is somehow a tad easier to parse.

"Compelling and usable alternatives"? As in cout vs printf, or STL algorithms vs loops? Right.

Where "C++ pushed the boundaries of knowledge" I can't even imagine; most of it was (badly) copied from other languages. Maybe const represents C++'s contribution to computer science… it's a good thing nobody was crazy enough to copy it to another language.

And it's not like PHP doesn't have new releases or new "best practice" advice. In fact I doubt it's worse than the C++ advice where every decade they tell you to use a new idiom for everything (remember auto_ptr?)

The only difference between PHP and C++ is the existence of cheerleaders thinking this shit pushes the boundaries of anything.

#38 Andrea on 07.09.14 at 11:38 pm

Your FQA was enlighting for a undergrad like me. It explained a lot of things and pushed me to experiment with Ada and understand how languages work, or are supposed to work

Recently I witnessed another "failure" of C++-related software. People kept talking about the Eigen matrix library as it was the latest panacea. It turns out that, predictably, the objects created with that library do not correctly handle a low-level issue like alignment, which is best handled by the compiler, and so code using Eigen may or may not segfault, in different ways. Cool, isn't it?

I'm not interested in C++ at all. In my sector, mathematical programming software, all I see are simple libraries with ugly interfaces and lots of unintelligible boilerplate. So much for the language everyone uses. People who seek alternatives either translate the library in python, gainging little over expressiveness, or implement their own little scripting language, which can become a nightmare to work with. C/C++ have been a real drag for our field.

Anyway, coming back in topic, I read briefly about rvalue references (people never wonder whether having obscure names and complicated concepts hinders solving complicated problems rather than helps it). It turns out, again, predictably, that the newest addition fucks up template instantiation, type conversion and the like, but can also force to duplicate code to cater to the new type specifier, as with other C++ constructs.

#39 Yossi Kreinin on 07.11.14 at 10:56 am

Eigen… thanks for the tip, will try to stay away from it.

As to rvalue references – indeed it's quite the can of worms, one of those things in C++11 that I wonder if I'm even going to invest my time into figuring out.

#40 1011011 on 07.18.14 at 1:21 am

C++ is and always has been a pointer hell just add subtract and bash your face in for clean stable code.

#41 Justin L. on 08.27.14 at 9:11 pm

Nit: s/doze/dose.

In all seriousness, I don't think too many people are capable of writing outrageous, funny-cuz-its-true commentary comparable to your FQA (or even this blog post). Good luck finding a worthy replacement!

#42 David M. on 08.27.14 at 9:45 pm

The FQA is one of the most accurate and useful descriptions of C++ that has ever been written, and was obviously written by someone, Yossi, who knows far more about C++ than the vast majority of C++ programmers. Those claiming otherwise advertise their profound ignorance.

#43 Keith Thompson on 08.27.14 at 11:08 pm

_myarr[5]={0};

I suggest that's not a good example. It clearly (at least to me) is meant to be an assignment whose LHS is element 5 of _myarr. If the {0} were an initializer, the LHS would have to be a *declaration*, not just an expression; it would have to define the element type of the array. The author of that line of code just made a mistake; I don't think that particular mistake illustrates a weakness in C++.

Someone who thought an array object could be assigned like that would probably try to write:

_myarr = {0};

and then realize, when the compiler rejects it, that the initialization needs to be on the definition of the variable.

#44 John S. on 08.28.14 at 1:13 am

Keith Thompson,

All that arcana, simply to declare an effing array?! No other language even comes close to the stupidity that is C++.

#45 Keith Thompson on 08.28.14 at 2:22 am

John S. : I'm not sure what "arcana" you're talking about.

To declare an array:

int myarr[5];

To declare an array and initialize all its elements to zero:

int myarr[5] = { 0 };

To assign a value to an element of an array:

myarr[2] = 42;

There are admittedly some oddities in the treatment of arrays (which C++ inherits from C). The fact that { 0 } can be used as an initializer but not as an expression is inconvenient. But just declaring the array is straightforward.

#46 Holden McGroin on 08.28.14 at 5:45 am

C++ rules. PHP blows chunks

#47 Ian on 08.28.14 at 11:31 am

I can't count the number of times I've asked a question on S.O. on a complex C language issue, and received as an answer "you should move to C++ (you dinosaur)", typically from a programming student with approximately zero experience in field code deployment and maintenance.

It looks to me that programming schools are the main driver that push C++ on the agenda, since it has become the academic reference, on the ground that it is "object oriented", so it must be a great thing.

Bollock.

I also deeply regret that C had to suffer from the very existence of C++, which implicitly pretends to be "C next gen", thus killing any evolution of C stand alone. C99 is great, but it would deserve more care to evolve with our time.

#48 Fernando on 08.28.14 at 9:05 pm

C++ is a tool. If it is too complex for your, don't use it.
You could use another language like Java, Python or Javascript and let your CPU melts.

#49 Dani on 09.02.14 at 7:32 pm

And if English grammar is too complex for you, don't use it :)

#50 Redbrain on 09.13.14 at 4:52 am

Thing is system level development is almost dead. Game dev, kernels and maybe compilers depends are about the only reason to look at c/c++. I love c I hack on gcc and commit to it. But the problem is most work people do these days are web apps or app development so really there isn't a need for the speed increase they provide abd higher level applications are faster abd easier to develop in python or java etc. you not going to start writing JavaScript front ends to c++ back ends outside of legacy code projects. The language more over gets abused terribly in real life mixing c types and idioms into c++ they are two very different languages but it really does get very very ugly abd hard to read fast. Although it's much easier to develop mocking unit tests in c++ than pure c so a lot of the reason to use c now gets harder if you like test driven development.

Tldr: c++ is abused very easily, readability sucks more features aren't really solving any real problems. Not enough reasons to use c++ in app development or web stacks.

#51 BaCaRoZzo on 09.18.14 at 10:24 am

Thanks again for the effort put in your FQA. Even if you writing style can hurt someone's feelings I've always found your ARGUMENTS rock solid. :) I think it's a pity that C++ community does not accept criticisms. After all (constructive) criticisms (like yours) are the best way to improve and get better.

For what concerns Stroustrup, I'm not sure that he sees Java/C# as the ultimate evil.
Citing him from an interview for the 5 most important languages you need to know, he says "[...] C++, of course; Java; maybe Python for mainline work… And if you know those, you can't help know sort of a little bit about Ruby and JavaScript, you can't help knowing C because that's what fills out the domain and of course C-Sharp. [...]".
So, at least, he recognizes the importance of such languages nowadays. Not a statement of love at all, anyway.

#52 Tomalak Geret'kal on 09.26.14 at 7:42 pm

Your C++ vs PHP comparison is broken. C++'s ridiculous oddities stem from _consistency_ and robustness of specification. It may have resulted in a silly language that's insane to write in, but at least it does all make logical sense (if only from an academic point of view). PHP's ridiculous oddities are the actual opposite: inconsistencies meted out in the design for no particular reason.

#53 Yossi Kreinin on 09.26.14 at 10:14 pm

This wouldn't be relevant even if it weren't patently false, which it is. Example: C++'s undecidable grammar – a problem PHP doesn't have – does not follow from any requirement, reasonable or bogus, ever invented by Stroustrup or any of the many C++ apologists. It's just a goofy mistake by a CS PhD who should have known better. From an "academic" point of view this one appears particularly brain-damaged.

You're not the first commenter whom I give this reply, because you're not the first commenter saying more or less what you said… Why do I even bother? (And this is why attrition precludes my effective functioning as the FQA maintainer.)

#54 Yossi Kreinin on 09.26.14 at 10:15 pm

…See specifically comments #30 and #31.

#55 nice byte on 01.04.15 at 6:10 am

Just wanted to point out that your example with string comparison is wrong – in C++ "char*" is not a string, it's a *pointer* and comparing pointers themselves (not the data that they point to) actually makes sense, while PHP's behavior in that example is completely unjustifiable.

#56 Yossi Kreinin on 01.04.15 at 8:28 am

You illustrate my point wonderfully. Why isn't PHP's behavior justifiable, exactly? Many, many languages have many different comparison operators and some of these do type conversions. (In fact, nothing prevents you from defining an operator== comparing std::string and int, PHPifying C++ to some extent.)

As to "what char* is" – well, "abc" definitely looks like a string but is a char*, not an std::string or any reasonable string type, and comparing its address with anything is never actually useful, once you think about it. It's definitely way less useful than having "5"==5 evaluate to true. And while there are historical and other reasons for it all, the extent to which you perceive this as "justifiable" is exactly the extent to which you've learned to love C++'s shit instead of seeing it for what it is…

#57 red75prim on 06.21.15 at 12:53 am

I'd like to point out that now there's alternative to C++. Rust.

#58 Yossi Kreinin on 06.21.15 at 8:40 am

First of all there were always alternatives to C++, just not with the same feature set as Rust… As to Rust – I have to look into it… It looks very promising, but also very hairy and without first-hand experience it's hard for me to tell how it is to program in it. I guess it's "the only alternative to C++" if you want something high-level without a gc. There's a reason why most languages have gc, though, and Rust's complexity in the memory management department basically puts a spotlight on that reason… Still, you need gc-freedom when you need it, and I hope Rust proves to be what it promises to be.

#59 Lukas on 03.24.16 at 4:27 pm

I like C++ a lot for some reason. Despite this, I consider the C++ FQA a really nice resource, and the provocative tone makes for a more entertaining read, and is refreshing in the face of the hype. As far as I recall, it also is factually correct, so my like and your dislike comes down to how much the problems objectively disgust us.

I can definitely see how the paternal tone in the old C++ FAQ reads very provocatively to someone critical of C++.

As for C++11 onwards, I think the additions are really nice (even though they're burdened by the typical C++ quirks forced by a desire for compatibility). I think they make programming in C++ much more productive and when used at the exclusion of some older styles at least a bit safer.

Of course, the old things don't really go away, so this takes some studying. I already knew C++ pretty well, so these were "just" additions to me (admittedly, some still difficult to grasp). Looking back, considering the amount of time I've spent, the prospect of learning C++ from scratch seems daunting. I don't think I would spend this much time on a new language today.

#60 Lukas on 03.24.16 at 4:28 pm

* I meant subjective disgust.

#61 Yossi Kreinin on 03.25.16 at 10:09 am

Thanks a lot for your feedback!

#62 Alek on 11.07.16 at 6:30 pm

"In this sense, C++ is fine and a worthy achievement of a lifetime. Especially in a world where Putin is a candidate for a Nobel Peace prize and Obama already got one."

This quote just epitomizes the very era we currently live in. Way to go, Yossi.

It is sad, however understandable, to see the FQA come to a halt, at least for a time. Specially now that, in the eve of a new "C++ Standard ™", and after a number of "committee meetings" and several issued "proposals" (hahhaha!), we're provided with this fresh, truly rich material for even more intense reveling at the laughing insanity that C++ and its community is.

Cheers.

#63 Yossi Kreinin on 11.07.16 at 7:01 pm

Well, it's on GitHub (https://github.com/yosefk/cpp-fqa) so anyone can edit/update it. Unfortunately, to date, the only change request I got was replacing "retarded" with "silly", the commit message being "removing ableist language."

#64 Borsch on 01.12.17 at 9:49 pm

> Well, it's on GitHub
> the only change request I got was replacing "retarded" with "silly", the commit message being "removing ableist language."

Ironically, accepting this might actually let the project be on Github for a longer time.

Github went full-SJW lately, actively censoring repositories even for stuff like this. (one of the examples: https://www.reddit.com/r/KotakuInAction/comments/3eizt4/socjus_github_bans_a_popular_webm_conversion/)

If you think this might be an issue, consider hosting it on https://gitgud.io or https://gitlab.com

#65 Yossi Kreinin on 01.12.17 at 10:09 pm

I dunno, I don't particularly give a shit one way or the other. If they kick me out, I'll go elsewhere. I just put it where I thought the most users are.

#66 Martin Kunev on 08.07.18 at 4:51 pm

> PHP – a language full of quirks which at least gives you memory and type safety

There is no type safety in PHP. You should look up the definition of type safety. Comparing C++ and PHP is naïve – they are intended to solve a completely different set of problems.

#67 SM Light Pack on 04.17.19 at 12:05 pm

This is really attention-grabbing, You're an overly professional blogger.
I have joined your feed and sit up for in quest of extra of your
fantastic post. Additionally, I have shared your website in my social
networks

#68 no you move quote on 04.24.19 at 12:15 pm

Hi there! I could have sworn I've been to this website before but after browsing through a few of the posts I realized
it's new to me. Anyhow, I'm certainly pleased I found it and I'll be book-marking it and checking back
regularly!

#69 Trimble Mensi GS200 on 04.27.19 at 10:31 pm

Amazing issues here. I'm very satisfied to peer your post.
Thank you a lot and I am having a look ahead to touch you.
Will you kindly drop me a mail?

#70 Sprinter 250M Brochure on 04.28.19 at 12:58 pm

Hey very cool blog!! Man .. Beautiful .. Amazing .. I will bookmark your site and take the feeds also?
I am satisfied to find numerous helpful information here
within the put up, we want work out extra strategies on this regard,
thank you for sharing. . . . . .

#71 TCRP1202 Total Station on 04.28.19 at 1:10 pm

Hey There. I found your weblog using msn. That is
a very smartly written article. I will make sure to bookmark it and return to
learn more of your helpful info. Thank you for the post.

I will definitely return.

#72 Leica Rugby 280DG on 05.02.19 at 2:46 am

Awesome blog! Is your theme custom made or did you download
it from somewhere? A theme like yours with a few simple tweeks would really
make my blog jump out. Please let me know where you got your
theme. Many thanks

#73 moving companys on 05.03.19 at 10:04 am

Howdy! Would you mind if I share your blog with my twitter group?
There's a lot of folks that I think would really appreciate your content.
Please let me know. Thanks

#74 murphy bed installation on 05.03.19 at 11:51 am

Do you mind if I quote a few of your posts as long
as I provide credit and sources back to your webpage?

My blog is in the very same niche as yours and my users would truly benefit from some
of the information you present here. Please let me know if this ok with you.
Thank you!

#75 GCS900 PDF on 05.07.19 at 3:38 am

I am genuinely happy to glance at this weblog posts which consists of plenty
of helpful data, thanks for providing these data.

#76 Trimble V10 Brochure on 05.07.19 at 6:13 am

I blog quite often and I seriously appreciate your content.
This great article has really peaked my interest. I am going to book mark your website and
keep checking for new information about once a week.
I subscribed to your RSS feed too.

#77 Trimble SPS850 on 05.07.19 at 1:47 pm

What's up mates, its fantastic post concerning tutoringand fully defined, keep it up all the time.

#78 http://spatialscanners.net on 05.08.19 at 5:42 pm

It's not my first time to go to see this site, i am browsing this web
site dailly and obtain nice facts from here everyday.

#79 FC-2200 on 05.09.19 at 3:22 am

You have made some decent points there. I looked on the web
to learn more about the issue and found most
individuals will go along with your views on this web site.

#80 warframe aimbot on 05.15.19 at 8:33 pm

I truly enjoy looking through on this web site , it holds superb content .

#81 New Rugby 420DG on 05.17.19 at 1:09 pm

It's going to be end of mine day, except before ending I am reading this wonderful piece of writing
to improve my knowledge.

#82 GLS-1500 on 05.20.19 at 7:16 pm

This paragraph will assist the internet users for creating new weblog or even a blog from
start to end.

#83 Nivo 5.M Prism Spec Sheet on 05.21.19 at 12:05 pm

Hey this is somewhat of off topic but I was wondering if blogs use WYSIWYG editors or if you have to
manually code with HTML. I'm starting a blog soon but have
no coding experience so I wanted to get guidance from someone
with experience. Any help would be enormously appreciated!

#84 Trimble Geo XT 3000 Series on 05.21.19 at 1:12 pm

We're a group of volunteers and opening a new scheme in our
community. Your website provided us with valuable information to work on. You have done a
formidable job and our entire community will be thankful to you.

#85 Best prebiotics on 05.25.19 at 12:55 am

Your way of describing the whole thing in this article is
actually nice, every one be capable of easily understand it, Thanks a lot.

#86 Best probiotic for women on 05.25.19 at 1:40 am

I know this if off topic but I'm looking into starting my own blog and was wondering what all is required to get set up?
I'm assuming having a blog like yours would cost a pretty penny?
I'm not very web savvy so I'm not 100% certain. Any suggestions or advice would be greatly appreciated.
Thank you

#87 gamefly free trial on 05.28.19 at 9:55 pm

What's up, every time i used to check website posts here in the
early hours in the daylight, for the reason that i like to learn more and more.

#88 gamefly free trial on 05.29.19 at 12:32 pm

Thanks for sharing your thoughts about gamefly free trial. Regards

#89 how to get help in windows 10 on 05.30.19 at 8:03 pm

Heya i'm for the first time here. I found this board and I find It truly useful & it helped me out much.
I hope to give something back and aid others like you helped me.

#90 gamefly free trial on 05.31.19 at 12:00 am

Thanks for your personal marvelous posting! I quite enjoyed reading
it, you may be a great author.I will make sure to
bookmark your blog and may come back someday.

I want to encourage you to definitely continue your great job,
have a nice evening!

#91 gamefly free trial on 05.31.19 at 4:58 pm

This is a topic that is close to my heart… Many thanks!
Where are your contact details though?

#92 Life Experience Degrees on 05.31.19 at 6:23 pm

great publish, very informative. I’m wondering why the other specialists of this sector do not realize
this. You should proceed your writing. I am sure, you’ve a huge readers’ base
already!

#93 Life Experience Degree on 05.31.19 at 6:24 pm

Ahaa, its nice conversation about this post at this place at this blog, I have
read all that, so now me also commenting here.

#94 belize travel guide  on 06.01.19 at 2:11 am

Thanks to my father who informed me on the topic of this blog, this webpage is in fact amazing.

#95 gamefly free trial on 06.02.19 at 1:28 pm

Hello, its fastidious paragraph regarding media print, we all be familiar with media is a
enormous source of data.

#96 gamefly free trial on 06.03.19 at 6:32 am

What i don't realize is if truth be told how
you're now not actually much more well-liked than you might be right now.

You're so intelligent. You already know thus significantly relating to this topic, made me
for my part imagine it from so many various angles. Its
like women and men don't seem to be interested unless it is one thing to accomplish
with Girl gaga! Your personal stuffs nice. All the time handle it up!

#97 gamefly free trial on 06.04.19 at 5:14 am

My brother suggested I might like this blog. He was once
totally right. This submit truly made my day. You can not imagine just how much time I had spent for this
info! Thanks!

#98 gamefly free trial on 06.05.19 at 4:16 pm

It is truly a great and useful piece of info. I am happy that you
just shared this useful info with us. Please stay us informed like
this. Thank you for sharing.

#99 gamefly free trial on 06.06.19 at 5:29 am

Remarkable issues here. I am very glad to look your
article. Thanks so much and I'm taking a look ahead to touch you.
Will you please drop me a e-mail?

#100 gamefly free trial on 06.06.19 at 10:52 am

Thanks a lot for sharing this with all folks you really recognize what you are speaking about!
Bookmarked. Kindly also talk over with my website =).
We may have a hyperlink trade agreement among us

#101 토토솔루션임대 on 06.06.19 at 11:48 pm

Hi there! This article couldn't be written much better!
Looking through this post reminds me of my previous roommate!
He always kept preaching about this. I am going to forward this post to him.
Fairly certain he'll have a very good read. Thanks for sharing!

#102 ps4 games 2013-14 ign on 06.08.19 at 3:05 am

Howdy! This is my 1st comment here so I just wanted to give a
quick shout out and say I really enjoy reading your articles.
Can you suggest any other blogs/websites/forums that go over the same subjects?
Thanks!

#103 안전놀이터 카지노 on 06.10.19 at 5:34 am

Link exchange is nothing else however it is simply placing the other person's website link on your page at
appropriate place and other person will also do similar
in support of you.

#104 gamefly free trial 2019 coupon on 06.10.19 at 8:13 pm

I do believe all the ideas you have offered in your post.
They are really convincing and can certainly work. Still, the
posts are very short for novices. Could you please prolong them a little from subsequent time?
Thanks for the post.

#105 playstation 4 best games ever made 2019 on 06.12.19 at 7:32 pm

Write more, thats all I have to say. Literally, it seems as though
you relied on the video to make your point. You clearly know what youre talking about,
why waste your intelligence on just posting videos to your site
when you could be giving us something informative to read?

#106 quest bars on 06.16.19 at 10:01 pm

Aw, this was an incredibly nice post. Taking a few minutes and actual effort to generate a great article… but what can I say… I
put things off a whole lot and don't manage to get
anything done.

#107 aimbot fortnite download on 06.17.19 at 12:53 pm

I have interest in this, cheers.

#108 http://tinyurl.com/ on 06.18.19 at 12:35 am

Excellent pieces. Keep posting such kind of info on your site.
Im really impressed by it.
Hi there, You have done an excellent job. I'll definitely digg
it and for my part recommend to my friends.
I'm confident they will be benefited from this site.

#109 먹튀검증 업체 on 06.18.19 at 4:03 am

I read this article fully on the topic of the resemblance
of newest and previous technologies, it's remarkable article.

#110 먹튀검증 토토 on 06.18.19 at 5:40 am

Do you have a spam issue on this website; I also am a
blogger, and I was wanting to know your situation; many of us
have developed some nice procedures and we are looking to trade strategies with other folks, why not shoot
me an e-mail if interested.

#111 proxo key on 06.19.19 at 2:09 pm

I like this website its a master peace ! Glad I found this on google .

#112 vn hax pubg on 06.20.19 at 10:42 pm

Some truly wonderful posts on this web site , appreciate it for contribution.

#113 poseidonhd on 06.21.19 at 8:20 am

Unquestionably believe that that you stated.
Your favourite reason appeared to be on the web the simplest thing to remember of.
I say to you, I definitely get irked even as other folks consider issues that
they just do not recognize about. You controlled to
hit the nail upon the highest and also defined out the entire thing with no need side-effects , people could take a signal.
Will probably be back to get more. Thank you

#114 nonsense diamond 1.9 on 06.21.19 at 11:46 am

Deference to op , some superb selective information .

#115 plenty of fish dating site on 06.21.19 at 11:06 pm

I think everything said was actually very logical. But, think about this, suppose you were to write a awesome
headline? I ain't saying your content is not solid, but
suppose you added a post title to maybe grab a person's attention? I mean C++11 FQA anyone?
is a little vanilla. You might look at Yahoo's front page and watch how
they create article headlines to get viewers to open the links.
You might add a related video or a related pic or two to get people interested about everything've written. Just my opinion, it would make your
blog a little livelier.

#116 star valor cheats on 06.23.19 at 9:05 pm

Enjoyed reading through this, very good stuff, thankyou .

#117 company web designers Stockport on 06.24.19 at 7:37 am

My developer is trying to persuade me to move to .net from PHP.

I have always disliked the idea because of the expenses.

But he's tryiong none the less. I've been using Movable-type on various websites for about a year and am worried about switching to another
platform. I have heard excellent things about blogengine.net.
Is there a way I can import all my wordpress posts into it?

Any kind of help would be greatly appreciated!

#118 gmod hacks on 06.24.19 at 7:00 pm

I am glad to be one of the visitors on this great website (:, appreciate it for posting .

#119 Full spectrum CBD oil on 06.24.19 at 11:16 pm

I visited many web sites except the audio quality for
audio songs present at this site is genuinely fabulous.

#120 Dian on 06.25.19 at 12:52 am

I simply could not depart your website prior to suggesting that
I actually enjoyed the standard information a person supply for your visitors?
Is going to be back often to check up on new posts

#121 manufacturers looking for distributors on 06.25.19 at 3:07 am

Way cool! Some extremely valid points! I appreciate you writing this post and also the rest of the website is also very good.

#122 devindztni.blogofoto.com on 06.25.19 at 4:07 pm

In fact when someone doesn't know then its up to other
viewers that they will assist, so here it happens.

#123 fortnite mods on 06.25.19 at 11:43 pm

Thanks for this website. I definitely agree with what you are saying.

#124 krunker aimbot on 06.26.19 at 10:11 am

You got yourself a new rader.

#125 eavestrough cleaning whitby on 06.26.19 at 1:21 pm

Good day I am so grateful I found your webpage,
I really found you by error, while I was looking on Yahoo for something else, Regardless I am here now
and would just like to say thanks for a remarkable post
and a all round thrilling blog (I also love the theme/design), I don’t have time to browse it all
at the minute but I have bookmarked it and also included your RSS feeds,
so when I have time I will be back to read a lot more, Please do keep up the
great b.

#126 ispoofer license key on 06.27.19 at 9:13 am

Yeah bookmaking this wasn’t a risky decision outstanding post! .

#127 netflix-premium-account-a48159.fitnell.com on 06.27.19 at 3:23 pm

An impressive share! I've just forwarded this onto a coworker who has been conducting a little
research on this. And he in fact bought me dinner due
to the fact that I found it for him… lol.
So allow me to reword this…. Thank YOU for the meal!!
But yeah, thanks for spending some time to discuss this subject here on your
site.

#128 synapse x serial key on 06.28.19 at 12:14 am

Thanks for this post. I definitely agree with what you are saying.

#129 strucid aimbot script on 06.28.19 at 11:10 am

Respect to website author , some wonderful entropy.

#130 advanced systemcare 11.5 pro key on 06.28.19 at 3:51 pm

Respect to website author , some wonderful entropy.

#131 how to get help in windows 10 on 06.29.19 at 7:11 am

Hello colleagues, nice paragraph and nice arguments commented here, I
am really enjoying by these.

#132 http://consultoria-seo17272.ezblogz.com/15020375/e-waste-and-the-necessity-of-electronic-recycling on 06.29.19 at 2:45 pm

What's Taking place i'm new to this, I stumbled upon this I have found It positively helpful and it
has helped me out loads. I hope to contribute & aid different customers like its aided me.
Great job.

#133 keksv4 on 07.01.19 at 11:39 am

Enjoyed reading through this, very good stuff, thankyou .

#134 tinyurl.com on 07.01.19 at 6:08 pm

Thank you for another informative website. The place else may I get that kind of information written in such a perfect
approach? I have a undertaking that I'm simply now working on, and
I've been at the look out for such information.

#135 fortnite cheats on 07.01.19 at 10:25 pm

stays on topic and states valid points. Thank you.

#136 hacking apex legends pc on 07.02.19 at 10:29 am

Very interesting points you have remarked, appreciate it for putting up.

#137 cleaning gutter on 07.03.19 at 1:01 am

Thank you for every other fantastic article.
The place else may just anyone get that kind of information in such an ideal
means of writing? I have a presentation subsequent week,
and I am at the look for such info.

#138 download vnhax on 07.03.19 at 9:51 am

Me like, will read more. Thanks!

#139 cyberhackid on 07.03.19 at 9:48 pm

I really enjoy examining on this web , it has got good article .

#140 prison life hacks on 07.04.19 at 9:49 am

Found this on yahoo and I’m happy I did. Well written website.

#141 phantom forces aimbot on 07.04.19 at 9:40 pm

I conceive this web site holds some real superb information for everyone : D.

#142 dego hack on 07.05.19 at 10:05 am

Intresting, will come back here more often.

#143 Testosterone on 07.05.19 at 3:20 pm

I am truly thankful to the holder of this web
page who has shared this wonderful post at here.

#144 tom clancy's the division hacks on 07.05.19 at 10:19 pm

Cheers, great stuff, I like.

#145 netflixpremiumaccountchec39628.ivasdesign.com on 07.06.19 at 12:01 am

I go to see day-to-day some web pages and sites to read posts,
except this web site provides feature based writing.

#146 Lachlan on 07.06.19 at 12:14 am

Hello are using WordPress for your site platform? I'm new
to the blog world but I'm trying to get started and set up
my own. Do you require any html coding expertise to
make your own blog? Any help would be really appreciated!

#147 http://blog-de-especialista-seo.diowebhost.com on 07.06.19 at 1:38 pm

Tremendous things here. I'm very happy to look your post.
Thanks so much and I'm taking a look ahead to contact you.
Will you please drop me a mail?

#148 netflixpremiumaccountgene15926.xzblogs.com on 07.07.19 at 2:23 am

Fantastic goods from you, man. I have understand your stuff previous to and
you're just extremely wonderful. I really like what you have acquired here, certainly like what you are saying and the way in which you say it.
You make it enjoyable and you still take care of to keep it wise.

I can not wait to read much more from you.

This is actually a tremendous website.

#149 rekordbox torrent download on 07.07.19 at 3:52 am

Intresting, will come back here once in a while.

#150 call of duty black ops 4 pc license key on 07.07.19 at 12:16 pm

I like this site because so much useful stuff on here : D.

#151 برنامج سياحى on 07.07.19 at 2:31 pm

Hello, just wanted to tell you, I loved this article.
It was helpful. Keep on posting!

#152 best haircut Mississauga on 07.07.19 at 2:42 pm

It's actually a cool and helpful piece of information. I'm happy that you
just shared this helpful information with us. Please keep us
informed like this. Thanks for sharing.

#153 spyhunter 5.4.2.101 key on 07.08.19 at 1:01 pm

I must say got into this post. I found it to be interesting and loaded with unique points of interest.

#154 fps unlocker on 07.09.19 at 2:56 pm

I really got into this article. I found it to be interesting and loaded with unique points of view.

#155 Willard Olson on 07.10.19 at 12:38 am

Безумно крутой пост! Я постоянно захожу на этот веб-блог, и поистине впечатлен) Здесь размещена действительно нужная информация в каждом разделе,
и подобного материала очень много!!!

Именно его мне не хватало, чтобы закончить последний раздел моего труда:
) Прежде я долгое время искал именно эту информацию.
Мерси, удачи!

#156 Contemporary House Plans in South Africa on 07.10.19 at 1:57 pm

I'm not sure exactly why but this web site is loading very slow for me.
Is anyone else having this issue or is it a issue on my end?
I'll check back later on and see if the problem still exists.

#157 Lagree fitness on 07.12.19 at 1:58 pm

Hmm is anyone else having problems with the images on this blog loading?
I'm trying to determine if its a problem on my end or if
it's the blog. Any suggestions would be greatly appreciated.

#158 카지노사이트 on 07.13.19 at 2:46 am

Hello, I read your blog regularly. Your story-telling style
is awesome, keep doing what you're doing!

#159 betty on 07.14.19 at 2:01 am

Thank you for the great read!

#160 Warrant Software on 07.14.19 at 3:10 pm

Hiya! Quick question that's totally off topic.
Do you know how to make your site mobile friendly?
My site looks weird when browsing from my
iphone4. I'm trying to find a theme or plugin that might be able to
resolve this issue. If you have any suggestions, please share.
Cheers!

#161 Gregorio on 07.15.19 at 1:51 am

I am no longer certain where you're getting your information,
but great topic. I needs to spend a while studying more or working out more.
Thanks for magnificent info I used to be searching for this info
for my mission.

#162 webcam teen dildo on 07.15.19 at 2:13 am

some great ideas this gave me!

#163 plenty of fish dating site on 07.15.19 at 10:16 am

I'm curious to find out what blog platform you are working with?
I'm having some minor security problems with my latest site and I'd like to find
something more safeguarded. Do you have any solutions?

#164 legal porno on 07.16.19 at 12:03 am

great advice you give

#165 legalporno free on 07.16.19 at 12:24 am

great advice you give

#166 consultoriaseo26926.look4blog.com on 07.16.19 at 1:16 am

Aw, this was an extremely good post. Taking a few minutes and
actual effort to make a very good article… but what can I
say… I procrastinate a lot and don't manage to get anything done.

#167 catalytic converter price guide on 07.16.19 at 3:23 am

Hey there, I think your website might be having browser compatibility issues.
When I look at your website in Chrome, it looks
fine but when opening in Internet Explorer, it has some overlapping.
I just wanted to give you a quick heads up!
Other then that, fantastic blog!

#168 Verline Desper on 07.16.19 at 2:51 pm

like

#169 how to get help in windows 10 on 07.16.19 at 3:07 pm

Thanks , I've recently been looking for info approximately this topic for a while and yours is
the greatest I've discovered till now. However, what in regards to the
bottom line? Are you positive in regards to the source?

#170 Herman on 07.18.19 at 12:14 am

I simply could not go away your web site prior to suggesting that
I extremely loved the usual information an individual provide for your visitors?
Is going to be back continuously to investigate cross-check new
posts

#171 Ahmad Coonan on 07.18.19 at 12:44 am

Skyking, Skyking, this clue is your next bit of data. Do message the agency at your earliest convenience. No further information until next transmission. This is broadcast #3111. Do not delete.

#172 how to get help in windows 10 on 07.18.19 at 1:35 am

Woah! I'm really digging the template/theme of this blog.
It's simple, yet effective. A lot of times it's tough to get that "perfect balance" between usability and visual appearance.
I must say you have done a very good job with this. In addition, the blog loads very fast for me
on Chrome. Superb Blog!

#173 Properties for sale in Nigeria on 07.18.19 at 12:40 pm

I want to to thank you for this good read!! I certainly
enjoyed every bit of it. I have got you book marked to check out new stuff you post…

#174 lg صيانة ال جي on 07.18.19 at 2:05 pm

Hello are using WordPress for your blog platform?
I'm new to the blog world but I'm trying to get started and set up my
own. Do you need any html coding expertise to make your own blog?
Any help would be greatly appreciated!

#175 veruca_james on 07.19.19 at 1:50 am

amazing content thanks

#176 jeniffer_stone on 07.19.19 at 2:06 am

you are amazing

#177 buydrugonline on 07.19.19 at 2:53 am

This blog is amazing! Thank you.

#178 Buy Drugs Online on 07.19.19 at 3:02 am

This blog is amazing! Thank you.

#179 plenty of fish dating site on 07.19.19 at 3:58 pm

I think this is among the most significant information for me.
And i'm glad reading your article. But should remark on some general things, The web site style is perfect, the articles is really excellent : D.

Good job, cheers

#180 platform shoes on 07.20.19 at 7:50 am

Thanks to my father who stated to me concerning this web site, this
blog is actually awesome.

#181 how to get help in windows 10 on 07.20.19 at 10:30 am

What i do not realize is in fact how you are not really much more smartly-favored than you may be now.

You are very intelligent. You understand thus considerably in terms of this topic, produced me individually consider it from
numerous numerous angles. Its like women and men don't seem
to be interested unless it's one thing to do with Girl gaga!
Your own stuffs outstanding. All the time deal with it up!

#182 Patty on 07.20.19 at 11:57 pm

If you would like to increase your familiarity simply keep visiting this web
page and be updated with the newest gossip posted here.

#183 CharlesGaf on 07.21.19 at 12:18 pm

He's the only quarterback in NFL history to throw for 3,000 yards and run for 500 yards in his first four seasons. He's run for 33 touchdowns in his career.
Pagano expressed similar sentiments before the Jacksonville game and Hasselbeck said almost exactly the same thing before the Houston game.
"Obviously, Luke is one of the best linebackers, if not the best linebacker in the game," Kelly said. "I know with Thomas Davis next to him that it's the best pair that we'll face and I said that last year in our game.
"It's not like talking to the media. You're talking to another man, eye to eye, about why they should pick you. This has been a very enjoyable process, and I love every second of it. If it's something dealing with football, I love it."
Some things to know about the Titans-Texans game.

#184 prodigy hack level 100 on 07.21.19 at 6:27 pm

Found this on yahoo and I’m happy I did. Well written site.

#185 hoomefurniture on 07.22.19 at 5:34 pm

Very good information. Lucky me I came across your website by accident (stumbleupon).

I have saved as a favorite for later!

#186 natalielise on 07.22.19 at 9:38 pm

It's amazing in support of me to have a site,
which is good in support of my experience. thanks
admin plenty of fish natalielise

#187 gadai bpkb on 07.22.19 at 9:43 pm

Since the admin of this site is working, no question very
soon it will be renowned, due to its feature contents.

#188 plenty of fish dating site on 07.23.19 at 11:10 am

Wow, wonderful blog layout! How long have you been blogging for?

you make blogging look easy. The overall look of your site is fantastic, let alone the content!

#189 صيانة شاشات سامسونج on 07.23.19 at 4:11 pm

My relatives all the time say that I am killing my time here at web, but I know I am getting experience
all the time by reading thes fastidious content.

#190 evogame net wifi on 07.23.19 at 5:30 pm

Enjoyed reading through this, very good stuff, thankyou .

#191 date coukgar on 07.23.19 at 10:44 pm

I am 43 years old and a mother this helped me!

#192 date cougaqr on 07.23.19 at 10:53 pm

I am 43 years old and a mother this helped me!

#193 datye cougar on 07.23.19 at 11:28 pm

I am 43 years old and a mother this helped me!

#194 date cougae on 07.23.19 at 11:34 pm

I am 43 years old and a mother this helped me!

#195 date clugar on 07.23.19 at 11:45 pm

I am 43 years old and a mother this helped me!

#196 date coubgar on 07.24.19 at 12:00 am

I am 43 years old and a mother this helped me!

#197 forza horizon 4 crack on 07.24.19 at 5:50 pm

I enjoying, will read more. Thanks!

#198 평택 고덕 파라곤 on 07.24.19 at 6:38 pm

Wow! This blog looks exactly like my old one! It's on a
entirely different subject but it has pretty much the same page layout and design. Outstanding choice of colors!

#199 guest farms near Windhoek on 07.25.19 at 12:23 am

I constantly spent my half an hour to read this blog's articles or reviews daily along with a mug of coffee.

#200 blog-seo-profissional.blog5.net on 07.25.19 at 5:14 am

I loved as much as you will receive carried out right here.
The sketch is tasteful, your authored material stylish.
nonetheless, you command get got an impatience over that you
wish be delivering the following. unwell unquestionably come further formerly again since exactly the same nearly very often inside case you shield this hike.

#201 plenty of fish dating site on 07.25.19 at 2:48 pm

My brother recommended I might like this website. He
was totally right. This post truly made my day. You can not imagine just how much time I
had spent for this information! Thanks!

#202 blog-profisisonal-de-seo.xzblogs.com on 07.25.19 at 4:58 pm

This post is truly a nice one it assists new
the web visitors, who are wishing for blogging.

#203 campsites near Swakopmund on 07.25.19 at 6:04 pm

It's genuinely very complicated in this busy life to listen news on TV, so I just use world wide web for that reason, and get the latest information.

#204 ezfrags on 07.25.19 at 8:26 pm

Respect to website author , some wonderful entropy.

#205 smore.com on 07.26.19 at 11:03 am

Magnificent beat ! I would like to apprentice while you amend
your web site, how could i subscribe for a blog site?
The account aided me a acceptable deal. I had been tiny
bit acquainted of this your broadcast provided bright clear concept plenty of fish natalielise

#206 skisploit on 07.26.19 at 9:38 pm

I was looking at some of your articles on this site and I believe this internet site is really instructive! Keep on posting .

#207 netflixpremiumaccountcrac60470.blog5.net on 07.27.19 at 2:11 pm

Hi! Would you mind if I share your blog with my
twitter group? There's a lot of folks that I think would really enjoy your content.
Please let me know. Thank you

#208 online shopping on 07.28.19 at 11:58 am

Thanks for finally talking about > C++11 FQA anyone? < Liked it!

#209 먹튀검증 on 07.28.19 at 3:52 pm

Have you ever thought about creating an e-book or guest authoring on other sites?
I have a blog centered on the same topics you discuss and
would love to have you share some stories/information. I know my subscribers would appreciate your work.
If you are even remotely interested, feel free to send me an e-mail.

#210 blog-de-seo-de-verdade.diowebhost.com on 07.29.19 at 12:01 am

Yesterday, while I was at work, my sister stole my iPad and tested
to see if it can survive a 25 foot drop, just so she can be a youtube sensation. My iPad is now broken and she has 83 views.

I know this is completely off topic but I had to share it with someone!

#211 Reynaldo Coveny on 07.29.19 at 1:45 pm

Несмотря на то, что это конец рабочего дня, я читаю этот удивительно полезный пост, чтобы расширить мой кругозор…

#212 Cambodia Tourism on 07.29.19 at 3:34 pm

Howdy just wanted to give you a brief heads up and let you know a few of
the pictures aren't loading properly. I'm not sure why but I think its a
linking issue. I've tried it in two different internet browsers
and both show the same outcome.

#213 solarmovies on 09.20.19 at 1:21 pm

You make it entertaining and you continue to care for to keep it sensible. I can’t wait to learn much more from you. This is actually a great web site.

#214 fmovies on 09.20.19 at 1:22 pm

You could definitely see your expertise in the work you write. The world hopes for even more passionate writers like you who aren’t afraid to say how they believe. Always follow your heart.