SlideShare a Scribd company logo
1 of 72
Download to read offline
Adventures with
nothrow movable types
arvid@libtorrent.org
What I learned from building a move-only container
Agenda
• Move semantics in 60 seconds

• nothrow_move_constructible types

• = default - definitions

• The standard containers

• swap and nothrow_move_assignable
Move semantics
std::string
.
.
.
.
.
.
move-construct a string
Move semantics
std::string
move-construct a string
.
.
.
.
.
.
std::string
Move semantics
std::string
nullptr
move-construct a string
.
.
.
.
.
.
std::string std::string
move-construct a string
Move semantics
Moving shines in containers
Move semantics
Growing a vector of strings

std::vector<std::string>
std::string
std::string
std::string
.......
.......
.......
Move semantics
std::vector<std::string>
std::string
std::string
std::string
.......
.......
.......
std::string
std::string
std::string
std::string
Growing a vector of strings

1. Allocate new array
Move semantics
std::vector<std::string>
std::string
std::string
std::string
.......
.......
.......
std::string
std::string
std::string
std::string
Growing a vector of strings

2. Move construct elements into it
Move semantics
std::vector<std::string>
std::string
std::string
std::string
.......
.......
.......
std::string
std::string
std::string
std::string
Growing a vector of strings

3. Point to new array
Move semantics
std::vector<std::string>
.......
.......
.......
std::string
std::string
std::string
std::string
Growing a vector of strings

4. Destruct old array
Not so fast

What about exceptions?
vector
• If the move constructor can throw it cannot provide the
strong exception guarantee

(i.e. the vector state is unchanged if there’s an error)
• If the move constructor can throw it cannot provide the
strong exception guarantee

(i.e. the vector state is unchanged if there’s an error)
x x x x x x
vector
• If the move constructor can throw it cannot provide the
strong exception guarantee

(i.e. the vector state is unchanged if there’s an error)
x x x x x
x
Move
vector
• If the move constructor can throw it cannot provide the
strong exception guarantee

(i.e. the vector state is unchanged if there’s an error)
x x x x
x x
Move
vector
• If the move constructor can throw it cannot provide the
strong exception guarantee

(i.e. the vector state is unchanged if there’s an error)
x x x x
x x
vector
Move fails with exception!
• If the move constructor can throw it cannot provide the
strong exception guarantee

(i.e. the vector state is unchanged if there’s an error)
x x x x
x x
How do you restore the state
without risking more failures?
vector
std::is_nothrow_move_constructible<T>
• Type-trait to tell you whether move constructor can throw.

• If move constructor can throw, std::vector must copy
elements!

vector
struct A {
A(A&&);
};
struct B {
B(B&&) noexcept;
};
vector
NOT nothrow move
constructible
nothrow move
constructible
• Traditional (C++98) vector grows by copying.

Still done for types whose move constructor can throw
x x x x x x
vector
x x x x x x
x
Copy
• Traditional (C++98) vector grows by copying.

Still done for types whose move constructor can throw
vector
x x x x x x
x x
Copy
• Traditional (C++98) vector grows by copying.

Still done for types whose move constructor can throw
vector
x x x x x x
x x
• Traditional (C++98) vector grows by copying.

Still done for types whose move constructor can throw
vector
Copy fails with exception.
State unchanged
vector
std::move_if_noexcept(T&);
Acts as move() if nothrow move constructible

otherwise pass through T const&.
• I built a container and did not want to have to copy
elements
my container
• I built a container and did not want to have to copy
elements

• static_assert(

std::is_nothrow_move_constructible_v<T>);
my container
• I built a container and did not want to have to copy
elements

• static_assert(

std::is_nothrow_move_constructible_v<T>);
• The static assert failed
my container
struct A {
std::vector<int> foobar;
};
nothrow movable
struct A {
A(A&&) noexcept = default;
std::vector<int> foobar;
};
nothrow movable
struct A {
A(A&&) noexcept = default;
std::vector<int> foobar;
};
nothrow movable
error: exception specification of explicitly
defaulted move constructor does not match the
calculated one
A(A&&) noexcept = default;
^
Declaring a function “= default”

deduces noexcept specifier!
nothrow movable
struct A {
A(A&&) = default;
int foobar;
};
= default
struct A {
A(A&&) = default;
int foobar;
};
= default
YES
nothrow move constructible
struct A {
A(A&&);
int foobar;
};
inline A::A(A&&) = default;
= default
struct A {
A(A&&);
int foobar;
};
inline A::A(A&&) = default;
= default
NOT
nothrow move constructible
struct A {
A(A&&);
int foobar;
};
inline A::A(A&&) = default;
• The declaration counts (not the definition)

• =default definition will fit even though it deduces
noexcept
= default
struct A {
A(A&&) noexcept = default;
int foobar;
};
• “= default”-declaration can be used instead of
static_assert, to ensure nothrow move constructability
= default
struct A {
A();
int foobar;
};
inline A::A() : foobar(0) {}
= default
struct A {
A();
int foobar;
};
inline A::A() : foobar(0) {}
= default
NOT
nothrow default constructible
struct A {
A() = default;
int foobar = 0;
};
= default
YES
nothrow default constructible
struct A {
A(A&&) noexcept = default;
std::vector<int> foobar;
};
nothrow movable
back to std::vector
standard library types
Type
became nothrow move
constructible
std::vector C++17
std::pair C++11
std::tuple
std::string
std::list
std::map
std::set
std::deque
std::forward_list
std::function
standard library types
Type
became nothrow move
constructible
std::vector C++17
std::pair C++11
std::tuple C++11
std::string
std::list
std::map
std::set
std::deque
std::forward_list
std::function
standard library types
Type
became nothrow move
constructible
std::vector C++17
std::pair C++11
std::tuple C++11
std::string C++11
std::list
std::map
std::set
std::deque
std::forward_list
std::function
standard library types
Type
became nothrow move
constructible
std::vector C++17
std::pair C++11
std::tuple C++11
std::string C++11
std::list X
std::map
std::set
std::deque
std::forward_list
std::function
standard library types
Type
became nothrow move
constructible
std::vector C++17
std::pair C++11
std::tuple C++11
std::string C++11
std::list X
std::map X
std::set
std::deque
std::forward_list
std::function
standard library types
Type
became nothrow move
constructible
std::vector C++17
std::pair C++11
std::tuple C++11
std::string C++11
std::list X
std::map X
std::set X
std::deque X
std::forward_list X
std::function X
standard library types
Type
became nothrow move
constructible
std::vector C++17
std::pair C++11
std::tuple C++11
std::string C++11
std::list X
std::map X
std::set X
std::deque X
std::forward_list X
std::function X
}Heap
allocated
sentinel
node
SOO
• Implementations are allowed to add noexcept specifiers
standard library types
• Implementations are allowed to add noexcept specifiers

• in libc++ (clang) and libstdc++ (GCC) all those containers
and function object are nothrow move constructible
standard library types
• Implementations are allowed to add noexcept specifiers

• in libc++ (clang) and libstdc++ (GCC) all those containers
and function object are nothrow move constructible

• The Dinkumware library (msvc) use sentinel nodes in
node-based containers
standard library types
sentinel node
List
begin()
end()
• Simplifies edge cases at beginning and end of list
sentinel node
List
begin()
end()
• Simplifies edge cases at beginning and end of list

• Empty list still has one heap allocated node
sentinel node
List
begin()
end()
• Simplifies edge cases at beginning and end of list

• Empty list still has one heap allocated node
• Move constructing list must
still leave moved-from
container with sentinel node
sentinel node
List
begin()
end()
• Simplifies edge cases at beginning and end of list

• Empty list still has one heap allocated node
• Move constructing list must
still leave moved-from
container with sentinel node

• default construction may
throw
noexcept
• noexcept move constructors improve performance in
vector

• noexcept move assignment help error handling/
exception safety
noexcept
void rotate_log_file() {
auto filename = calculate_filename(...);
file f(filename);
existing_log_file = std::move(f);
}
noexcept
void rotate_log_file() {
auto filename = calculate_filename(...);
file f(filename);
existing_log_file = std::move(f);
}
• perform work that may fail

• commit result with noexcept operation(s)

• move assign or swap()
commit
swap
template<typename T>
void swap(T& t1, T& t2) {
T temp = std::move(t1);
t1 = std::move(t2);
t2 = std::move(temp);
}
swap
• nothrow move assignable and nothrow swappable are
related attributes

• make it simpler to write fault tolerant code
nothrow move assignable
C++14
Type
nothrow move
assignable
nothrow
swappable
std::string ✓* X
std::pair ✓ ✓
std::tuple ✓ ✓
std::vector X X
std::list X X
std::map X X
std::set X X
std::deque X X
std::forward_list X X
std::function X ✓
string::operator=
• string assignment was declared noexcept in C++11

• different allocator instances may not support passing
allocations between eachother (but the default one does)

• only libc++ (clang) made it (conditionally) noexcept

• GCC and MSVC did not
string::operator=
• Defect report 2063

Contradictory requirements for string move assignment
• ends with Howard Hinnant proposing
using at = allocator_traits<Allocator>;
basic_string& assign(basic_string&& str)
noexcept(
at::propagate_on_container_move_assignment::value
|| at::is_always_equal::value);
string::operator=
• Adopted by all containers in C++17

• essence: "if the allocator is move assignable"
using at = allocator_traits<Allocator>;
basic_string& assign(basic_string&& str)
noexcept(
at::propagate_on_container_move_assignment::value
|| at::is_always_equal::value);
Type
nothrow move
assignable
nothrow
swappable
std::string ✓ ✓
std::pair ✓ ✓
std::tuple ✓ ✓
std::vector ✓ ✓
std::list ✓ ✓
std::map ✓ ✓
std::set ✓ ✓
std::deque ✓ ✓
std::forward_list ✓ ✓
std::function X ✓
nothrow move assignable
C++17
Conclusion
• declare noexcept

• move constructors

• move assignment operators

• swap

• = default will deduce noexcept for

• default-, copy- and move constructors

• copy- and move assignment operators 

• static_assert() that they truly are

• nothrow move constructible

• nothrow move assignable
Thank you
github.com/arvidn
arvid@libtorrent.org

More Related Content

What's hot

From android/java to swift (3)
From android/java to swift (3)From android/java to swift (3)
From android/java to swift (3)allanh0526
 
Introduction to Scala for JCConf Taiwan
Introduction to Scala for JCConf TaiwanIntroduction to Scala for JCConf Taiwan
Introduction to Scala for JCConf TaiwanJimin Hsieh
 
Designing a database like an archaeologist
Designing a database like an archaeologistDesigning a database like an archaeologist
Designing a database like an archaeologistyoavrubin
 
The Ring programming language version 1.6 book - Part 32 of 189
The Ring programming language version 1.6 book - Part 32 of 189The Ring programming language version 1.6 book - Part 32 of 189
The Ring programming language version 1.6 book - Part 32 of 189Mahmoud Samir Fayed
 
CR17 - Designing a database like an archaeologist
CR17 - Designing a database like an archaeologistCR17 - Designing a database like an archaeologist
CR17 - Designing a database like an archaeologistyoavrubin
 
(3) cpp abstractions more_on_user_defined_types
(3) cpp abstractions more_on_user_defined_types(3) cpp abstractions more_on_user_defined_types
(3) cpp abstractions more_on_user_defined_typesNico Ludwig
 
Scala-对Java的修正和超越
Scala-对Java的修正和超越Scala-对Java的修正和超越
Scala-对Java的修正和超越Caoyuan Deng
 
AutoDesk
AutoDeskAutoDesk
AutoDeskSE3D
 
Core Java Concepts
Core Java ConceptsCore Java Concepts
Core Java Conceptsmdfkhan625
 
JavaScript Web Development
JavaScript Web DevelopmentJavaScript Web Development
JavaScript Web Developmentvito jeng
 
Scala Back to Basics: Type Classes
Scala Back to Basics: Type ClassesScala Back to Basics: Type Classes
Scala Back to Basics: Type ClassesTomer Gabel
 
Extending javascript part one
Extending javascript part oneExtending javascript part one
Extending javascript part oneVijaya Anand
 

What's hot (20)

From android/java to swift (3)
From android/java to swift (3)From android/java to swift (3)
From android/java to swift (3)
 
Coding in Style
Coding in StyleCoding in Style
Coding in Style
 
Introduction to Scala for JCConf Taiwan
Introduction to Scala for JCConf TaiwanIntroduction to Scala for JCConf Taiwan
Introduction to Scala for JCConf Taiwan
 
Designing a database like an archaeologist
Designing a database like an archaeologistDesigning a database like an archaeologist
Designing a database like an archaeologist
 
The Ring programming language version 1.6 book - Part 32 of 189
The Ring programming language version 1.6 book - Part 32 of 189The Ring programming language version 1.6 book - Part 32 of 189
The Ring programming language version 1.6 book - Part 32 of 189
 
CR17 - Designing a database like an archaeologist
CR17 - Designing a database like an archaeologistCR17 - Designing a database like an archaeologist
CR17 - Designing a database like an archaeologist
 
Scala: A brief tutorial
Scala: A brief tutorialScala: A brief tutorial
Scala: A brief tutorial
 
Java string handling
Java string handlingJava string handling
Java string handling
 
(3) cpp abstractions more_on_user_defined_types
(3) cpp abstractions more_on_user_defined_types(3) cpp abstractions more_on_user_defined_types
(3) cpp abstractions more_on_user_defined_types
 
Scala taxonomy
Scala taxonomyScala taxonomy
Scala taxonomy
 
Scala-对Java的修正和超越
Scala-对Java的修正和超越Scala-对Java的修正和超越
Scala-对Java的修正和超越
 
C# - What's Next?
C# - What's Next?C# - What's Next?
C# - What's Next?
 
AutoDesk
AutoDeskAutoDesk
AutoDesk
 
Core Java Concepts
Core Java ConceptsCore Java Concepts
Core Java Concepts
 
JavaScript Web Development
JavaScript Web DevelopmentJavaScript Web Development
JavaScript Web Development
 
Scala Back to Basics: Type Classes
Scala Back to Basics: Type ClassesScala Back to Basics: Type Classes
Scala Back to Basics: Type Classes
 
Extending javascript part one
Extending javascript part oneExtending javascript part one
Extending javascript part one
 
Python programming : Abstract classes interfaces
Python programming : Abstract classes interfacesPython programming : Abstract classes interfaces
Python programming : Abstract classes interfaces
 
ppopoff
ppopoffppopoff
ppopoff
 
Scala coated JVM
Scala coated JVMScala coated JVM
Scala coated JVM
 

Similar to C++ nothrow movable types

2CPP06 - Arrays and Pointers
2CPP06 - Arrays and Pointers2CPP06 - Arrays and Pointers
2CPP06 - Arrays and PointersMichael Heron
 
C++ process new
C++ process newC++ process new
C++ process new敬倫 林
 
Learn c++ Programming Language
Learn c++ Programming LanguageLearn c++ Programming Language
Learn c++ Programming LanguageSteve Johnson
 
Bringing nullability into existing code - dammit is not the answer.pptx
Bringing nullability into existing code - dammit is not the answer.pptxBringing nullability into existing code - dammit is not the answer.pptx
Bringing nullability into existing code - dammit is not the answer.pptxMaarten Balliauw
 
constructorsfjy5ediykEASFul;IUWORHusi;gfb.pptx
constructorsfjy5ediykEASFul;IUWORHusi;gfb.pptxconstructorsfjy5ediykEASFul;IUWORHusi;gfb.pptx
constructorsfjy5ediykEASFul;IUWORHusi;gfb.pptxAshrithaRokkam
 
2 BytesC++ course_2014_c3_ function basics&parameters and overloading
2 BytesC++ course_2014_c3_ function basics&parameters and overloading2 BytesC++ course_2014_c3_ function basics&parameters and overloading
2 BytesC++ course_2014_c3_ function basics&parameters and overloadingkinan keshkeh
 
Software Architecture: Principles, Patterns and Practices
Software Architecture: Principles, Patterns and PracticesSoftware Architecture: Principles, Patterns and Practices
Software Architecture: Principles, Patterns and PracticesGanesh Samarthyam
 
Intro To C++ - Class #18: Vectors & Arrays
Intro To C++ - Class #18: Vectors & ArraysIntro To C++ - Class #18: Vectors & Arrays
Intro To C++ - Class #18: Vectors & ArraysBlue Elephant Consulting
 
Introduction to web programming for java and c# programmers by @drpicox
Introduction to web programming for java and c# programmers by @drpicoxIntroduction to web programming for java and c# programmers by @drpicox
Introduction to web programming for java and c# programmers by @drpicoxDavid Rodenas
 
Cs1123 3 c++ overview
Cs1123 3 c++ overviewCs1123 3 c++ overview
Cs1123 3 c++ overviewTAlha MAlik
 
JAZOON'13 - Paul Brauner - A backend developer meets the web: my Dart experience
JAZOON'13 - Paul Brauner - A backend developer meets the web: my Dart experienceJAZOON'13 - Paul Brauner - A backend developer meets the web: my Dart experience
JAZOON'13 - Paul Brauner - A backend developer meets the web: my Dart experiencejazoon13
 
Introduction to Python for Plone developers
Introduction to Python for Plone developersIntroduction to Python for Plone developers
Introduction to Python for Plone developersJim Roepcke
 
Web development basics (Part-3)
Web development basics (Part-3)Web development basics (Part-3)
Web development basics (Part-3)Rajat Pratap Singh
 
Introduction to the rust programming language
Introduction to the rust programming languageIntroduction to the rust programming language
Introduction to the rust programming languageNikolay Denev
 

Similar to C++ nothrow movable types (20)

2CPP16 - STL
2CPP16 - STL2CPP16 - STL
2CPP16 - STL
 
2CPP06 - Arrays and Pointers
2CPP06 - Arrays and Pointers2CPP06 - Arrays and Pointers
2CPP06 - Arrays and Pointers
 
C++ process new
C++ process newC++ process new
C++ process new
 
Learn c++ Programming Language
Learn c++ Programming LanguageLearn c++ Programming Language
Learn c++ Programming Language
 
C++ 11 usage experience
C++ 11 usage experienceC++ 11 usage experience
C++ 11 usage experience
 
Bringing nullability into existing code - dammit is not the answer.pptx
Bringing nullability into existing code - dammit is not the answer.pptxBringing nullability into existing code - dammit is not the answer.pptx
Bringing nullability into existing code - dammit is not the answer.pptx
 
Overview of the Hive Stinger Initiative
Overview of the Hive Stinger InitiativeOverview of the Hive Stinger Initiative
Overview of the Hive Stinger Initiative
 
constructorsfjy5ediykEASFul;IUWORHusi;gfb.pptx
constructorsfjy5ediykEASFul;IUWORHusi;gfb.pptxconstructorsfjy5ediykEASFul;IUWORHusi;gfb.pptx
constructorsfjy5ediykEASFul;IUWORHusi;gfb.pptx
 
2 BytesC++ course_2014_c3_ function basics&parameters and overloading
2 BytesC++ course_2014_c3_ function basics&parameters and overloading2 BytesC++ course_2014_c3_ function basics&parameters and overloading
2 BytesC++ course_2014_c3_ function basics&parameters and overloading
 
Software Architecture: Principles, Patterns and Practices
Software Architecture: Principles, Patterns and PracticesSoftware Architecture: Principles, Patterns and Practices
Software Architecture: Principles, Patterns and Practices
 
Intro To C++ - Class #18: Vectors & Arrays
Intro To C++ - Class #18: Vectors & ArraysIntro To C++ - Class #18: Vectors & Arrays
Intro To C++ - Class #18: Vectors & Arrays
 
C++ references
C++ referencesC++ references
C++ references
 
Introduction to web programming for java and c# programmers by @drpicox
Introduction to web programming for java and c# programmers by @drpicoxIntroduction to web programming for java and c# programmers by @drpicox
Introduction to web programming for java and c# programmers by @drpicox
 
Cs1123 3 c++ overview
Cs1123 3 c++ overviewCs1123 3 c++ overview
Cs1123 3 c++ overview
 
Klee and angr
Klee and angrKlee and angr
Klee and angr
 
JAZOON'13 - Paul Brauner - A backend developer meets the web: my Dart experience
JAZOON'13 - Paul Brauner - A backend developer meets the web: my Dart experienceJAZOON'13 - Paul Brauner - A backend developer meets the web: my Dart experience
JAZOON'13 - Paul Brauner - A backend developer meets the web: my Dart experience
 
Introduction to Python for Plone developers
Introduction to Python for Plone developersIntroduction to Python for Plone developers
Introduction to Python for Plone developers
 
Web development basics (Part-3)
Web development basics (Part-3)Web development basics (Part-3)
Web development basics (Part-3)
 
Price of an Error
Price of an ErrorPrice of an Error
Price of an Error
 
Introduction to the rust programming language
Introduction to the rust programming languageIntroduction to the rust programming language
Introduction to the rust programming language
 

Recently uploaded

Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)dollysharma2066
 
CCS355 Neural Network & Deep Learning UNIT III notes and Question bank .pdf
CCS355 Neural Network & Deep Learning UNIT III notes and Question bank .pdfCCS355 Neural Network & Deep Learning UNIT III notes and Question bank .pdf
CCS355 Neural Network & Deep Learning UNIT III notes and Question bank .pdfAsst.prof M.Gokilavani
 
Arduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.pptArduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.pptSAURABHKUMAR892774
 
Unit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfg
Unit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfgUnit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfg
Unit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfgsaravananr517913
 
Solving The Right Triangles PowerPoint 2.ppt
Solving The Right Triangles PowerPoint 2.pptSolving The Right Triangles PowerPoint 2.ppt
Solving The Right Triangles PowerPoint 2.pptJasonTagapanGulla
 
complete construction, environmental and economics information of biomass com...
complete construction, environmental and economics information of biomass com...complete construction, environmental and economics information of biomass com...
complete construction, environmental and economics information of biomass com...asadnawaz62
 
Call Girls Delhi {Jodhpur} 9711199012 high profile service
Call Girls Delhi {Jodhpur} 9711199012 high profile serviceCall Girls Delhi {Jodhpur} 9711199012 high profile service
Call Girls Delhi {Jodhpur} 9711199012 high profile servicerehmti665
 
lifi-technology with integration of IOT.pptx
lifi-technology with integration of IOT.pptxlifi-technology with integration of IOT.pptx
lifi-technology with integration of IOT.pptxsomshekarkn64
 
An experimental study in using natural admixture as an alternative for chemic...
An experimental study in using natural admixture as an alternative for chemic...An experimental study in using natural admixture as an alternative for chemic...
An experimental study in using natural admixture as an alternative for chemic...Chandu841456
 
Vishratwadi & Ghorpadi Bridge Tender documents
Vishratwadi & Ghorpadi Bridge Tender documentsVishratwadi & Ghorpadi Bridge Tender documents
Vishratwadi & Ghorpadi Bridge Tender documentsSachinPawar510423
 
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdfCCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdfAsst.prof M.Gokilavani
 
Instrumentation, measurement and control of bio process parameters ( Temperat...
Instrumentation, measurement and control of bio process parameters ( Temperat...Instrumentation, measurement and control of bio process parameters ( Temperat...
Instrumentation, measurement and control of bio process parameters ( Temperat...121011101441
 
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETEINFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETEroselinkalist12
 
Risk Assessment For Installation of Drainage Pipes.pdf
Risk Assessment For Installation of Drainage Pipes.pdfRisk Assessment For Installation of Drainage Pipes.pdf
Risk Assessment For Installation of Drainage Pipes.pdfROCENODodongVILLACER
 
Application of Residue Theorem to evaluate real integrations.pptx
Application of Residue Theorem to evaluate real integrations.pptxApplication of Residue Theorem to evaluate real integrations.pptx
Application of Residue Theorem to evaluate real integrations.pptx959SahilShah
 
8251 universal synchronous asynchronous receiver transmitter
8251 universal synchronous asynchronous receiver transmitter8251 universal synchronous asynchronous receiver transmitter
8251 universal synchronous asynchronous receiver transmitterShivangiSharma879191
 
Study on Air-Water & Water-Water Heat Exchange in a Finned Tube Exchanger
Study on Air-Water & Water-Water Heat Exchange in a Finned Tube ExchangerStudy on Air-Water & Water-Water Heat Exchange in a Finned Tube Exchanger
Study on Air-Water & Water-Water Heat Exchange in a Finned Tube ExchangerAnamika Sarkar
 
Class 1 | NFPA 72 | Overview Fire Alarm System
Class 1 | NFPA 72 | Overview Fire Alarm SystemClass 1 | NFPA 72 | Overview Fire Alarm System
Class 1 | NFPA 72 | Overview Fire Alarm Systemirfanmechengr
 

Recently uploaded (20)

Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
Call Us ≽ 8377877756 ≼ Call Girls In Shastri Nagar (Delhi)
 
CCS355 Neural Network & Deep Learning UNIT III notes and Question bank .pdf
CCS355 Neural Network & Deep Learning UNIT III notes and Question bank .pdfCCS355 Neural Network & Deep Learning UNIT III notes and Question bank .pdf
CCS355 Neural Network & Deep Learning UNIT III notes and Question bank .pdf
 
Arduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.pptArduino_CSE ece ppt for working and principal of arduino.ppt
Arduino_CSE ece ppt for working and principal of arduino.ppt
 
Unit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfg
Unit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfgUnit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfg
Unit7-DC_Motors nkkjnsdkfnfcdfknfdgfggfg
 
Solving The Right Triangles PowerPoint 2.ppt
Solving The Right Triangles PowerPoint 2.pptSolving The Right Triangles PowerPoint 2.ppt
Solving The Right Triangles PowerPoint 2.ppt
 
complete construction, environmental and economics information of biomass com...
complete construction, environmental and economics information of biomass com...complete construction, environmental and economics information of biomass com...
complete construction, environmental and economics information of biomass com...
 
Call Girls Delhi {Jodhpur} 9711199012 high profile service
Call Girls Delhi {Jodhpur} 9711199012 high profile serviceCall Girls Delhi {Jodhpur} 9711199012 high profile service
Call Girls Delhi {Jodhpur} 9711199012 high profile service
 
lifi-technology with integration of IOT.pptx
lifi-technology with integration of IOT.pptxlifi-technology with integration of IOT.pptx
lifi-technology with integration of IOT.pptx
 
POWER SYSTEMS-1 Complete notes examples
POWER SYSTEMS-1 Complete notes  examplesPOWER SYSTEMS-1 Complete notes  examples
POWER SYSTEMS-1 Complete notes examples
 
Exploring_Network_Security_with_JA3_by_Rakesh Seal.pptx
Exploring_Network_Security_with_JA3_by_Rakesh Seal.pptxExploring_Network_Security_with_JA3_by_Rakesh Seal.pptx
Exploring_Network_Security_with_JA3_by_Rakesh Seal.pptx
 
An experimental study in using natural admixture as an alternative for chemic...
An experimental study in using natural admixture as an alternative for chemic...An experimental study in using natural admixture as an alternative for chemic...
An experimental study in using natural admixture as an alternative for chemic...
 
Vishratwadi & Ghorpadi Bridge Tender documents
Vishratwadi & Ghorpadi Bridge Tender documentsVishratwadi & Ghorpadi Bridge Tender documents
Vishratwadi & Ghorpadi Bridge Tender documents
 
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdfCCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
CCS355 Neural Network & Deep Learning Unit II Notes with Question bank .pdf
 
Instrumentation, measurement and control of bio process parameters ( Temperat...
Instrumentation, measurement and control of bio process parameters ( Temperat...Instrumentation, measurement and control of bio process parameters ( Temperat...
Instrumentation, measurement and control of bio process parameters ( Temperat...
 
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETEINFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
INFLUENCE OF NANOSILICA ON THE PROPERTIES OF CONCRETE
 
Risk Assessment For Installation of Drainage Pipes.pdf
Risk Assessment For Installation of Drainage Pipes.pdfRisk Assessment For Installation of Drainage Pipes.pdf
Risk Assessment For Installation of Drainage Pipes.pdf
 
Application of Residue Theorem to evaluate real integrations.pptx
Application of Residue Theorem to evaluate real integrations.pptxApplication of Residue Theorem to evaluate real integrations.pptx
Application of Residue Theorem to evaluate real integrations.pptx
 
8251 universal synchronous asynchronous receiver transmitter
8251 universal synchronous asynchronous receiver transmitter8251 universal synchronous asynchronous receiver transmitter
8251 universal synchronous asynchronous receiver transmitter
 
Study on Air-Water & Water-Water Heat Exchange in a Finned Tube Exchanger
Study on Air-Water & Water-Water Heat Exchange in a Finned Tube ExchangerStudy on Air-Water & Water-Water Heat Exchange in a Finned Tube Exchanger
Study on Air-Water & Water-Water Heat Exchange in a Finned Tube Exchanger
 
Class 1 | NFPA 72 | Overview Fire Alarm System
Class 1 | NFPA 72 | Overview Fire Alarm SystemClass 1 | NFPA 72 | Overview Fire Alarm System
Class 1 | NFPA 72 | Overview Fire Alarm System
 

C++ nothrow movable types