Can you `= delete` a templated function on a second declaration?Global initialization with temporary function...
Can't login after removing Flatpak
Calling GPL'ed socket server inside Docker?
Importance sampling estimation of power function
Word for a small burst of laughter that can't be held back
Bug using breqn and babel
Pronoun introduced before its antecedent
How to make thick Asian sauces?
How bad would a partial hash leak be, realistically?
Credit card offering 0.5 miles for every cent rounded up. Too good to be true?
Incremental Ranges!
What is the purpose of building foundations?
Can a 2nd-level sorcerer use sorcery points to create a 2nd-level spell slot?
Do any instruments not produce overtones?
Adding two lambda-functions in C++
In this example, which path would a monster affected by the Dissonant Whispers spell take?
You've spoiled/damaged the card
Why is quantum entanglement surprising?
C SIGINT signal in Linux
Aligning object in a commutative diagram
Finding x,y coordinates where y is largest
Completing the square to find if quadratic form is positive definite.
How do I calculate APR from monthly instalments?
Do manufacturers try make their components as close to ideal ones as possible?
Should I "tell" my exposition or give it through dialogue?
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
8 hours ago
2
@OznOg @einpoklum notoriously asks very strange questions :). But finding that gcc bug is great!
– πάντα ῥεῖ
8 hours ago
no pb, that was just a chatty comment of mine; the question is completely valid to me.
– OznOg
8 hours ago
MSVC also accepts this: gcc.godbolt.org/z/CFIEgb
– JVApen
8 hours ago
2
@πάνταῥεῖ: Most flattering SE comment I've ever gotten! Thanks :-)
– einpoklum
6 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 6 hours ago
einpoklum
asked 8 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
8 hours ago
2
@OznOg @einpoklum notoriously asks very strange questions :). But finding that gcc bug is great!
– πάντα ῥεῖ
8 hours ago
no pb, that was just a chatty comment of mine; the question is completely valid to me.
– OznOg
8 hours ago
MSVC also accepts this: gcc.godbolt.org/z/CFIEgb
– JVApen
8 hours ago
2
@πάνταῥεῖ: Most flattering SE comment I've ever gotten! Thanks :-)
– einpoklum
6 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
8 hours ago
2
@OznOg @einpoklum notoriously asks very strange questions :). But finding that gcc bug is great!
– πάντα ῥεῖ
8 hours ago
no pb, that was just a chatty comment of mine; the question is completely valid to me.
– OznOg
8 hours ago
MSVC also accepts this: gcc.godbolt.org/z/CFIEgb
– JVApen
8 hours ago
2
@πάνταῥεῖ: Most flattering SE comment I've ever gotten! Thanks :-)
– einpoklum
6 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
8 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
8 hours ago
2
2
@OznOg @einpoklum notoriously asks very strange questions :). But finding that gcc bug is great!
– πάντα ῥεῖ
8 hours ago
@OznOg @einpoklum notoriously asks very strange questions :). But finding that gcc bug is great!
– πάντα ῥεῖ
8 hours ago
no pb, that was just a chatty comment of mine; the question is completely valid to me.
– OznOg
8 hours ago
no pb, that was just a chatty comment of mine; the question is completely valid to me.
– OznOg
8 hours ago
MSVC also accepts this: gcc.godbolt.org/z/CFIEgb
– JVApen
8 hours ago
MSVC also accepts this: gcc.godbolt.org/z/CFIEgb
– JVApen
8 hours ago
2
2
@πάνταῥεῖ: Most flattering SE comment I've ever gotten! Thanks :-)
– einpoklum
6 hours ago
@πάνταῥεῖ: Most flattering SE comment I've ever gotten! Thanks :-)
– einpoklum
6 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
6 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
6 hours ago
Bug report filed against GCC.
– einpoklum
6 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
5 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
6 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
6 hours ago
Bug report filed against GCC.
– einpoklum
6 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
5 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
6 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
6 hours ago
Bug report filed against GCC.
– einpoklum
6 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
5 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 5 hours ago
answered 8 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
6 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
6 hours ago
Bug report filed against GCC.
– einpoklum
6 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
5 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
6 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
6 hours ago
Bug report filed against GCC.
– einpoklum
6 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
5 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
6 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
6 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
6 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
6 hours ago
Bug report filed against GCC.
– einpoklum
6 hours ago
Bug report filed against GCC.
– einpoklum
6 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
5 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
5 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
8 hours ago
2
@OznOg @einpoklum notoriously asks very strange questions :). But finding that gcc bug is great!
– πάντα ῥεῖ
8 hours ago
no pb, that was just a chatty comment of mine; the question is completely valid to me.
– OznOg
8 hours ago
MSVC also accepts this: gcc.godbolt.org/z/CFIEgb
– JVApen
8 hours ago
2
@πάνταῥεῖ: Most flattering SE comment I've ever gotten! Thanks :-)
– einpoklum
6 hours ago