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;








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

















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













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

















  • 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












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











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















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













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

















  • 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



















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

Invision Community Contents History See also References External links Navigation menuProprietaryinvisioncommunity.comIPS Community ForumsIPS Community Forumsthis blog entry"License Changes, IP.Board 3.4, and the Future""Interview -- Matt Mecham of Ibforums""CEO Invision Power Board, Matt Mecham Is a Liar, Thief!"IPB License Explanation 1.3, 1.3.1, 2.0, and 2.1ArchivedSecurity Fixes, Updates And Enhancements For IPB 1.3.1Archived"New Demo Accounts - Invision Power Services"the original"New Default Skin"the original"Invision Power Board 3.0.0 and Applications Released"the original"Archived copy"the original"Perpetual licenses being done away with""Release Notes - Invision Power Services""Introducing: IPS Community Suite 4!"Invision Community Release Notes

Canceling a color specificationRandomly assigning color to Graphics3D objects?Default color for Filling in Mathematica 9Coloring specific elements of sets with a prime modified order in an array plotHow to pick a color differing significantly from the colors already in a given color list?Detection of the text colorColor numbers based on their valueCan color schemes for use with ColorData include opacity specification?My dynamic color schemes

Ласкавець круглолистий Зміст Опис | Поширення | Галерея | Примітки | Посилання | Навігаційне меню58171138361-22960890446Bupleurum rotundifoliumEuro+Med PlantbasePlants of the World Online — Kew ScienceGermplasm Resources Information Network (GRIN)Ласкавецькн. VI : Літери Ком — Левиправивши або дописавши її