On 7/6/2021 6:17 PM, James Kuyper wrote:
> On 7/6/21 3:50 PM, Andrey Tarasevich wrote:
>> On 6/24/2021 2:23 PM, James Kuyper wrote:
>>> ...
>>> What more do you need to know about the the type of myStack that you
>>> don't already know?
>>> The subject line says "#include <stack>", so you can reasonably presume
>>> from its name that myStack is of type std::stack<T, Container> for some
>>> values of T and Container.
>>
>> I need to know what `T` is. I need to know whether `myStack` holds
>> `int`s, or `myStack` holds something else, perhaps some non-trivial,
>> unrelated, possibly "heavy" type, which just happens to be implicitly
>> convertible from `int`.
>>
>> For `T == int` the difference between the variants would be purely
>> conceptual, without any practical consequences.
>>
>> For a "heavy" `T` the difference between these two variants can be
>> substantial. `push` would construct a temporary followed by two moves
>> from it into a new container entry, while `emplace` would construct a
>> new container entry in-place from the twice-forwarded `30`.
>
> That doesn't make the question "meaningless", nor does it prevent the
> question from having an answer. The question can be answered in full by
> quoting what the standard says about std::stack<T, Container>::push()
> and emplace(). The ways in which the behavior depends upon T and
> Containter are completely determined by what the standard says about
> those functions, directly or indirectly. The "significant difference"
> between those two functions that the OP was talking about consists
> entirely of the differences between what the standard says about them,
> along with the T-dependent implications of those differences.
This is just another way of saying that every C++ question can be
answered by a copy-paste of a link to the language standard. True, but
not very useful. Linking to a specific section does not change much from
qualitative point of view.
I'm confident that the OP meant to ask a very specific question and
expected to receive a very specific answer. Namely, the OP probably
assumed that we'll immediately "deduce" `myStack` as `std::stack<int>`.
I'm just pointing out the fact that this is an unjustified assumption.
When asking questions, don't assume. Strive to provide all relevant
information.
Yes, sometimes it is difficult to properly include every important
detail at the first try. But what we got here is ridiculously insufficient.