Can you `= delete` a templated function on a second declaration?Global initialization with temporary function objectgcc doesn't accept pack expansion in default template argumentType conversion at template non-type argument without constexprinitialization of static member of template classA weird behavior of using-declarationDeleted constructor - MSVC reports an error, Clang doesn'tParentheses and non-type template arguments in C++14C++ compilers diverge in encapsulation behavior - which one gets it right?Clang fails to find const template member function from base classIn C++14 is it valid to use a double in the dimension of a new expression?
What is in `tex.print` or `tex.sprint`?
Does the "6 seconds per round" rule apply to speaking/roleplaying during combat situations?
What happens to foam insulation board after you pour concrete slab?
Can a 2nd-level sorcerer use sorcery points to create a 2nd-level spell slot?
From system of coupled ODEs to separable ODE
X-shaped crossword
How do I write "Show, Don't Tell" as an Asperger?
Traffic law UK, pedestrians
Does the first version of Linux developed by Linus Torvalds have a GUI?
Completing the square to find if quadratic form is positive definite.
What's the correct term describing the action of sending a brand-new ship out into its first seafaring trip?
Can a magnetic field of an object be stronger than its gravity?
What do we gain with higher order logics?
How can drunken, homicidal elves successfully conduct a wild hunt?
Why don’t airliners have temporary liveries?
Why don't B747s start takeoffs with full throttle?
Importance sampling estimation of power function
How to make a setting relevant?
Does the growth of home value benefit from compound interest?
Is it a problem that pull requests are approved without any comments
Secure offsite backup, even in the case of hacker root access
Does an ice chest packed full of frozen food need ice? 18 day Grand Canyon trip
How bad would a partial hash leak be, realistically?
How to make thick Asian sauces?
Can you `= delete` a templated function on a second declaration?
Global initialization with temporary function objectgcc doesn't accept pack expansion in default template argumentType conversion at template non-type argument without constexprinitialization of static member of template classA weird behavior of using-declarationDeleted constructor - MSVC reports an error, Clang doesn'tParentheses and non-type template arguments in C++14C++ compilers diverge in encapsulation behavior - which one gets it right?Clang fails to find const template member function from base classIn C++14 is it valid to use a double in the dimension of a new expression?
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty height:90px;width:728px;box-sizing:border-box;
Consider the following code:
template <typename T> int foo();
template <typename T> int foo() = delete;
is this valid C++11?
- GCC (9.1) says: Yes!
- clang (8.0) says: No!
- nvcc (9.2) says: No!
- MSVC (19.20) says: Yes! (in C++14 mode, it doesn't support C++11.)
... see it all on GodBolt.
so which compilers are right and which compilers are s@#$%e ? :-)
c++ gcc clang nvcc compiler-bug
|
show 3 more comments
Consider the following code:
template <typename T> int foo();
template <typename T> int foo() = delete;
is this valid C++11?
- GCC (9.1) says: Yes!
- clang (8.0) says: No!
- nvcc (9.2) says: No!
- MSVC (19.20) says: Yes! (in C++14 mode, it doesn't support C++11.)
... see it all on GodBolt.
so which compilers are right and which compilers are s@#$%e ? :-)
c++ gcc clang nvcc compiler-bug
Well would be strange it to be valid as the first line says something like "well, there is a function called foo that is defined somewhere" which is exactly the contrary of delete.
– OznOg
9 hours ago
2
@OznOg @einpoklum notoriously asks very strange questions :). But finding that gcc bug is great!
– πάντα ῥεῖ
9 hours ago
no pb, that was just a chatty comment of mine; the question is completely valid to me.
– OznOg
9 hours ago
MSVC also accepts this: gcc.godbolt.org/z/CFIEgb
– JVApen
9 hours ago
3
@πάνταῥεῖ: Most flattering SE comment I've ever gotten! Thanks :-)
– einpoklum
7 hours ago
|
show 3 more comments
Consider the following code:
template <typename T> int foo();
template <typename T> int foo() = delete;
is this valid C++11?
- GCC (9.1) says: Yes!
- clang (8.0) says: No!
- nvcc (9.2) says: No!
- MSVC (19.20) says: Yes! (in C++14 mode, it doesn't support C++11.)
... see it all on GodBolt.
so which compilers are right and which compilers are s@#$%e ? :-)
c++ gcc clang nvcc compiler-bug
Consider the following code:
template <typename T> int foo();
template <typename T> int foo() = delete;
is this valid C++11?
- GCC (9.1) says: Yes!
- clang (8.0) says: No!
- nvcc (9.2) says: No!
- MSVC (19.20) says: Yes! (in C++14 mode, it doesn't support C++11.)
... see it all on GodBolt.
so which compilers are right and which compilers are s@#$%e ? :-)
c++ gcc clang nvcc compiler-bug
c++ gcc clang nvcc compiler-bug
edited 7 hours ago
einpoklum
asked 10 hours ago
einpoklumeinpoklum
39.6k28137280
39.6k28137280
Well would be strange it to be valid as the first line says something like "well, there is a function called foo that is defined somewhere" which is exactly the contrary of delete.
– OznOg
9 hours ago
2
@OznOg @einpoklum notoriously asks very strange questions :). But finding that gcc bug is great!
– πάντα ῥεῖ
9 hours ago
no pb, that was just a chatty comment of mine; the question is completely valid to me.
– OznOg
9 hours ago
MSVC also accepts this: gcc.godbolt.org/z/CFIEgb
– JVApen
9 hours ago
3
@πάνταῥεῖ: Most flattering SE comment I've ever gotten! Thanks :-)
– einpoklum
7 hours ago
|
show 3 more comments
Well would be strange it to be valid as the first line says something like "well, there is a function called foo that is defined somewhere" which is exactly the contrary of delete.
– OznOg
9 hours ago
2
@OznOg @einpoklum notoriously asks very strange questions :). But finding that gcc bug is great!
– πάντα ῥεῖ
9 hours ago
no pb, that was just a chatty comment of mine; the question is completely valid to me.
– OznOg
9 hours ago
MSVC also accepts this: gcc.godbolt.org/z/CFIEgb
– JVApen
9 hours ago
3
@πάνταῥεῖ: Most flattering SE comment I've ever gotten! Thanks :-)
– einpoklum
7 hours ago
Well would be strange it to be valid as the first line says something like "well, there is a function called foo that is defined somewhere" which is exactly the contrary of delete.
– OznOg
9 hours ago
Well would be strange it to be valid as the first line says something like "well, there is a function called foo that is defined somewhere" which is exactly the contrary of delete.
– OznOg
9 hours ago
2
2
@OznOg @einpoklum notoriously asks very strange questions :). But finding that gcc bug is great!
– πάντα ῥεῖ
9 hours ago
@OznOg @einpoklum notoriously asks very strange questions :). But finding that gcc bug is great!
– πάντα ῥεῖ
9 hours ago
no pb, that was just a chatty comment of mine; the question is completely valid to me.
– OznOg
9 hours ago
no pb, that was just a chatty comment of mine; the question is completely valid to me.
– OznOg
9 hours ago
MSVC also accepts this: gcc.godbolt.org/z/CFIEgb
– JVApen
9 hours ago
MSVC also accepts this: gcc.godbolt.org/z/CFIEgb
– JVApen
9 hours ago
3
3
@πάνταῥεῖ: Most flattering SE comment I've ever gotten! Thanks :-)
– einpoklum
7 hours ago
@πάνταῥεῖ: Most flattering SE comment I've ever gotten! Thanks :-)
– einpoklum
7 hours ago
|
show 3 more comments
1 Answer
1
active
oldest
votes
GCC and MSVC have a bug.
[dcl.fct.def.delete]
4 ... A deleted definition of a function shall be the first declaration of the function or, for an explicit specialization of a function template, the first declaration of that specialization...
Which I believe stands for instantiated declarations and definitions too. Since referring to a deleted function is a hard error, it must be declared as deleted asap.
Why "must" it be declared as deleted ASAP - as opposed to - before it is first referred to? Also, even if a deletion appeared later, a compiler could notice the error when it sees the deletion instead of when it sees the reference. But - accepting.
– einpoklum
8 hours ago
Also - is this still the case in C++14 and C++17? Just curious and I don't want to open another question.
– einpoklum
7 hours ago
Bug report filed against GCC.
– einpoklum
7 hours ago
1
@einpoklum - The code referring to it could be between the first declaration and definition. Demanding it on the first declaration is just easiest I suppose. And seeing as I quoted n4659 (C++17, haven't noticed the tag), yes it is. I checked n3337 (c++11), the wording is the same.
– StoryTeller
7 hours ago
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f56409551%2fcan-you-delete-a-templated-function-on-a-second-declaration%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
GCC and MSVC have a bug.
[dcl.fct.def.delete]
4 ... A deleted definition of a function shall be the first declaration of the function or, for an explicit specialization of a function template, the first declaration of that specialization...
Which I believe stands for instantiated declarations and definitions too. Since referring to a deleted function is a hard error, it must be declared as deleted asap.
Why "must" it be declared as deleted ASAP - as opposed to - before it is first referred to? Also, even if a deletion appeared later, a compiler could notice the error when it sees the deletion instead of when it sees the reference. But - accepting.
– einpoklum
8 hours ago
Also - is this still the case in C++14 and C++17? Just curious and I don't want to open another question.
– einpoklum
7 hours ago
Bug report filed against GCC.
– einpoklum
7 hours ago
1
@einpoklum - The code referring to it could be between the first declaration and definition. Demanding it on the first declaration is just easiest I suppose. And seeing as I quoted n4659 (C++17, haven't noticed the tag), yes it is. I checked n3337 (c++11), the wording is the same.
– StoryTeller
7 hours ago
add a comment |
GCC and MSVC have a bug.
[dcl.fct.def.delete]
4 ... A deleted definition of a function shall be the first declaration of the function or, for an explicit specialization of a function template, the first declaration of that specialization...
Which I believe stands for instantiated declarations and definitions too. Since referring to a deleted function is a hard error, it must be declared as deleted asap.
Why "must" it be declared as deleted ASAP - as opposed to - before it is first referred to? Also, even if a deletion appeared later, a compiler could notice the error when it sees the deletion instead of when it sees the reference. But - accepting.
– einpoklum
8 hours ago
Also - is this still the case in C++14 and C++17? Just curious and I don't want to open another question.
– einpoklum
7 hours ago
Bug report filed against GCC.
– einpoklum
7 hours ago
1
@einpoklum - The code referring to it could be between the first declaration and definition. Demanding it on the first declaration is just easiest I suppose. And seeing as I quoted n4659 (C++17, haven't noticed the tag), yes it is. I checked n3337 (c++11), the wording is the same.
– StoryTeller
7 hours ago
add a comment |
GCC and MSVC have a bug.
[dcl.fct.def.delete]
4 ... A deleted definition of a function shall be the first declaration of the function or, for an explicit specialization of a function template, the first declaration of that specialization...
Which I believe stands for instantiated declarations and definitions too. Since referring to a deleted function is a hard error, it must be declared as deleted asap.
GCC and MSVC have a bug.
[dcl.fct.def.delete]
4 ... A deleted definition of a function shall be the first declaration of the function or, for an explicit specialization of a function template, the first declaration of that specialization...
Which I believe stands for instantiated declarations and definitions too. Since referring to a deleted function is a hard error, it must be declared as deleted asap.
edited 7 hours ago
answered 9 hours ago
StoryTellerStoryTeller
110k16235297
110k16235297
Why "must" it be declared as deleted ASAP - as opposed to - before it is first referred to? Also, even if a deletion appeared later, a compiler could notice the error when it sees the deletion instead of when it sees the reference. But - accepting.
– einpoklum
8 hours ago
Also - is this still the case in C++14 and C++17? Just curious and I don't want to open another question.
– einpoklum
7 hours ago
Bug report filed against GCC.
– einpoklum
7 hours ago
1
@einpoklum - The code referring to it could be between the first declaration and definition. Demanding it on the first declaration is just easiest I suppose. And seeing as I quoted n4659 (C++17, haven't noticed the tag), yes it is. I checked n3337 (c++11), the wording is the same.
– StoryTeller
7 hours ago
add a comment |
Why "must" it be declared as deleted ASAP - as opposed to - before it is first referred to? Also, even if a deletion appeared later, a compiler could notice the error when it sees the deletion instead of when it sees the reference. But - accepting.
– einpoklum
8 hours ago
Also - is this still the case in C++14 and C++17? Just curious and I don't want to open another question.
– einpoklum
7 hours ago
Bug report filed against GCC.
– einpoklum
7 hours ago
1
@einpoklum - The code referring to it could be between the first declaration and definition. Demanding it on the first declaration is just easiest I suppose. And seeing as I quoted n4659 (C++17, haven't noticed the tag), yes it is. I checked n3337 (c++11), the wording is the same.
– StoryTeller
7 hours ago
Why "must" it be declared as deleted ASAP - as opposed to - before it is first referred to? Also, even if a deletion appeared later, a compiler could notice the error when it sees the deletion instead of when it sees the reference. But - accepting.
– einpoklum
8 hours ago
Why "must" it be declared as deleted ASAP - as opposed to - before it is first referred to? Also, even if a deletion appeared later, a compiler could notice the error when it sees the deletion instead of when it sees the reference. But - accepting.
– einpoklum
8 hours ago
Also - is this still the case in C++14 and C++17? Just curious and I don't want to open another question.
– einpoklum
7 hours ago
Also - is this still the case in C++14 and C++17? Just curious and I don't want to open another question.
– einpoklum
7 hours ago
Bug report filed against GCC.
– einpoklum
7 hours ago
Bug report filed against GCC.
– einpoklum
7 hours ago
1
1
@einpoklum - The code referring to it could be between the first declaration and definition. Demanding it on the first declaration is just easiest I suppose. And seeing as I quoted n4659 (C++17, haven't noticed the tag), yes it is. I checked n3337 (c++11), the wording is the same.
– StoryTeller
7 hours ago
@einpoklum - The code referring to it could be between the first declaration and definition. Demanding it on the first declaration is just easiest I suppose. And seeing as I quoted n4659 (C++17, haven't noticed the tag), yes it is. I checked n3337 (c++11), the wording is the same.
– StoryTeller
7 hours ago
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f56409551%2fcan-you-delete-a-templated-function-on-a-second-declaration%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Well would be strange it to be valid as the first line says something like "well, there is a function called foo that is defined somewhere" which is exactly the contrary of delete.
– OznOg
9 hours ago
2
@OznOg @einpoklum notoriously asks very strange questions :). But finding that gcc bug is great!
– πάντα ῥεῖ
9 hours ago
no pb, that was just a chatty comment of mine; the question is completely valid to me.
– OznOg
9 hours ago
MSVC also accepts this: gcc.godbolt.org/z/CFIEgb
– JVApen
9 hours ago
3
@πάνταῥεῖ: Most flattering SE comment I've ever gotten! Thanks :-)
– einpoklum
7 hours ago