Xcode 10.1 swift 4.2 operator overloading causing compiler warning: “All paths through this function will...












3















So I suddenly have this compiler warning that was not present on swift 3 or (I think) swift 4.0.
the code below overloads the += operator to perform a vector increment:



public func += ( left:  inout CGVector, right: CGVector) {
left += right
}


and produces the warning, I am puzzled can anyone shed light on why the warning is thrown and what is wrong?










share|improve this question

























  • I don't know swift, but here you seem to overload +=, and then immediately call it. So your stacktrace should look like this: += (a, b) -> += (a,b) -> += (a,b) ...

    – dyukha
    Nov 24 '18 at 5:54













  • You are simply calling overloaded function "+=" within itself. I guess replacing left += right with left = left + right will solve the problem.

    – Rakesh Pethani
    Nov 24 '18 at 6:40
















3















So I suddenly have this compiler warning that was not present on swift 3 or (I think) swift 4.0.
the code below overloads the += operator to perform a vector increment:



public func += ( left:  inout CGVector, right: CGVector) {
left += right
}


and produces the warning, I am puzzled can anyone shed light on why the warning is thrown and what is wrong?










share|improve this question

























  • I don't know swift, but here you seem to overload +=, and then immediately call it. So your stacktrace should look like this: += (a, b) -> += (a,b) -> += (a,b) ...

    – dyukha
    Nov 24 '18 at 5:54













  • You are simply calling overloaded function "+=" within itself. I guess replacing left += right with left = left + right will solve the problem.

    – Rakesh Pethani
    Nov 24 '18 at 6:40














3












3








3








So I suddenly have this compiler warning that was not present on swift 3 or (I think) swift 4.0.
the code below overloads the += operator to perform a vector increment:



public func += ( left:  inout CGVector, right: CGVector) {
left += right
}


and produces the warning, I am puzzled can anyone shed light on why the warning is thrown and what is wrong?










share|improve this question
















So I suddenly have this compiler warning that was not present on swift 3 or (I think) swift 4.0.
the code below overloads the += operator to perform a vector increment:



public func += ( left:  inout CGVector, right: CGVector) {
left += right
}


and produces the warning, I am puzzled can anyone shed light on why the warning is thrown and what is wrong?







swift swift4.2






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited Nov 24 '18 at 13:20









wvteijlingen

8,57112544




8,57112544










asked Nov 24 '18 at 5:51









Stephen SpringettStephen Springett

183




183













  • I don't know swift, but here you seem to overload +=, and then immediately call it. So your stacktrace should look like this: += (a, b) -> += (a,b) -> += (a,b) ...

    – dyukha
    Nov 24 '18 at 5:54













  • You are simply calling overloaded function "+=" within itself. I guess replacing left += right with left = left + right will solve the problem.

    – Rakesh Pethani
    Nov 24 '18 at 6:40



















  • I don't know swift, but here you seem to overload +=, and then immediately call it. So your stacktrace should look like this: += (a, b) -> += (a,b) -> += (a,b) ...

    – dyukha
    Nov 24 '18 at 5:54













  • You are simply calling overloaded function "+=" within itself. I guess replacing left += right with left = left + right will solve the problem.

    – Rakesh Pethani
    Nov 24 '18 at 6:40

















I don't know swift, but here you seem to overload +=, and then immediately call it. So your stacktrace should look like this: += (a, b) -> += (a,b) -> += (a,b) ...

– dyukha
Nov 24 '18 at 5:54







I don't know swift, but here you seem to overload +=, and then immediately call it. So your stacktrace should look like this: += (a, b) -> += (a,b) -> += (a,b) ...

– dyukha
Nov 24 '18 at 5:54















You are simply calling overloaded function "+=" within itself. I guess replacing left += right with left = left + right will solve the problem.

– Rakesh Pethani
Nov 24 '18 at 6:40





You are simply calling overloaded function "+=" within itself. I guess replacing left += right with left = left + right will solve the problem.

– Rakesh Pethani
Nov 24 '18 at 6:40












1 Answer
1






active

oldest

votes


















1














When you do left += right, it calls the same function that you were defining. In other words, your operator overload function += ( left: inout CGVector, right: CGVector) will call itself in all times (infinite recursion). You are doing something like



func foo(String: bar) {
foo(bar)
}


But just by replacing foo with +=, which is not logical. Xcode only gives you a warning now though, it is not an error that stops you from compiling. You probably have written this function wrong in the past (but the warning reminding you this was just added to the compiler).



You probably want something like this



public func += ( left:  inout CGVector, right: CGVector) {
left = CGVector(dx: left.dx + right.dx, dy: left.dy + right.dy)
}





share|improve this answer
























  • Sometimes even when the answer is staring you in the face you just can’t see it. Thanks now I see the obvious.

    – Stephen Springett
    Nov 24 '18 at 6:43











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%2f53455545%2fxcode-10-1-swift-4-2-operator-overloading-causing-compiler-warning-all-paths-t%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









1














When you do left += right, it calls the same function that you were defining. In other words, your operator overload function += ( left: inout CGVector, right: CGVector) will call itself in all times (infinite recursion). You are doing something like



func foo(String: bar) {
foo(bar)
}


But just by replacing foo with +=, which is not logical. Xcode only gives you a warning now though, it is not an error that stops you from compiling. You probably have written this function wrong in the past (but the warning reminding you this was just added to the compiler).



You probably want something like this



public func += ( left:  inout CGVector, right: CGVector) {
left = CGVector(dx: left.dx + right.dx, dy: left.dy + right.dy)
}





share|improve this answer
























  • Sometimes even when the answer is staring you in the face you just can’t see it. Thanks now I see the obvious.

    – Stephen Springett
    Nov 24 '18 at 6:43
















1














When you do left += right, it calls the same function that you were defining. In other words, your operator overload function += ( left: inout CGVector, right: CGVector) will call itself in all times (infinite recursion). You are doing something like



func foo(String: bar) {
foo(bar)
}


But just by replacing foo with +=, which is not logical. Xcode only gives you a warning now though, it is not an error that stops you from compiling. You probably have written this function wrong in the past (but the warning reminding you this was just added to the compiler).



You probably want something like this



public func += ( left:  inout CGVector, right: CGVector) {
left = CGVector(dx: left.dx + right.dx, dy: left.dy + right.dy)
}





share|improve this answer
























  • Sometimes even when the answer is staring you in the face you just can’t see it. Thanks now I see the obvious.

    – Stephen Springett
    Nov 24 '18 at 6:43














1












1








1







When you do left += right, it calls the same function that you were defining. In other words, your operator overload function += ( left: inout CGVector, right: CGVector) will call itself in all times (infinite recursion). You are doing something like



func foo(String: bar) {
foo(bar)
}


But just by replacing foo with +=, which is not logical. Xcode only gives you a warning now though, it is not an error that stops you from compiling. You probably have written this function wrong in the past (but the warning reminding you this was just added to the compiler).



You probably want something like this



public func += ( left:  inout CGVector, right: CGVector) {
left = CGVector(dx: left.dx + right.dx, dy: left.dy + right.dy)
}





share|improve this answer













When you do left += right, it calls the same function that you were defining. In other words, your operator overload function += ( left: inout CGVector, right: CGVector) will call itself in all times (infinite recursion). You are doing something like



func foo(String: bar) {
foo(bar)
}


But just by replacing foo with +=, which is not logical. Xcode only gives you a warning now though, it is not an error that stops you from compiling. You probably have written this function wrong in the past (but the warning reminding you this was just added to the compiler).



You probably want something like this



public func += ( left:  inout CGVector, right: CGVector) {
left = CGVector(dx: left.dx + right.dx, dy: left.dy + right.dy)
}






share|improve this answer












share|improve this answer



share|improve this answer










answered Nov 24 '18 at 6:24









paper1111paper1111

3,19411833




3,19411833













  • Sometimes even when the answer is staring you in the face you just can’t see it. Thanks now I see the obvious.

    – Stephen Springett
    Nov 24 '18 at 6:43



















  • Sometimes even when the answer is staring you in the face you just can’t see it. Thanks now I see the obvious.

    – Stephen Springett
    Nov 24 '18 at 6:43

















Sometimes even when the answer is staring you in the face you just can’t see it. Thanks now I see the obvious.

– Stephen Springett
Nov 24 '18 at 6:43





Sometimes even when the answer is staring you in the face you just can’t see it. Thanks now I see the obvious.

– Stephen Springett
Nov 24 '18 at 6:43




















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%2f53455545%2fxcode-10-1-swift-4-2-operator-overloading-causing-compiler-warning-all-paths-t%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

404 Error Contact Form 7 ajax form submitting

How to know if a Active Directory user can login interactively

Refactoring coordinates for Minecraft Pi buildings written in Python