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;
}







11















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 ? :-)










share|improve this question

























  • 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


















11















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 ? :-)










share|improve this question

























  • 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














11












11








11


1






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 ? :-)










share|improve this question
















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






share|improve this question















share|improve this question













share|improve this question




share|improve this question








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



















  • 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












1 Answer
1






active

oldest

votes


















14














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.






share|improve this answer


























  • 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












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
});


}
});














draft saved

draft discarded


















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









14














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.






share|improve this answer


























  • 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
















14














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.






share|improve this answer


























  • 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














14












14








14







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.






share|improve this answer















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.







share|improve this answer














share|improve this answer



share|improve this answer








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



















  • 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




















draft saved

draft discarded




















































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.




draft saved


draft discarded














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





















































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







Popular posts from this blog

Taj Mahal Inhaltsverzeichnis Aufbau | Geschichte | 350-Jahr-Feier | Heutige Bedeutung | Siehe auch |...

Baia Sprie Cuprins Etimologie | Istorie | Demografie | Politică și administrație | Arii naturale...

Nicolae Petrescu-Găină Cuprins Biografie | Opera | In memoriam | Varia | Controverse, incertitudini...